gpt4 book ai didi

c# - 允许 NullReferenceException 发生的可能性是一件坏事吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:42 24 4
gpt4 key购买 nike

我正在玩 Pex 和 Moles,运行 Pex 后发现几乎所有 Pex 说失败的测试都是因为 NullReferenceExceptions 被“允许”。阅读 Pex 文档,我发现了以下内容:

If a higher-level component passes malformed data to a lower-level component, which the lower-level component rejects, then the higher-level component should be prevented from doing so in the first place.

所以上面的建议是我们应该在调用其他方法/类之前使用如下方法测试空值:

if(foo == null)
throw new ArgumentNullException("its null and this shouldn't happen")
else
Bar(foo); //won't get a null reference exception here because we checked first...

恕我直言,全面检查空值对性能和代码膨胀的原因没有太大吸引力,但我想听听其他人怎么说....

最佳答案

是的,你应该在使用它们之前验证你的论点,IMO。

NullReferenceException 应该在使用未预料到的 null 值时发生。它永远不应该被显式抛出,并指示最终抛出它的方法级别的问题,或者它被调用的东西。

ArgumentNullException 表示调用堆栈中的方法中的错误比抛出它的方法。 (通常,但不总是,直接调用者。)

您越早抛出指示问题的异常,就越容易查明空值首先出现在中的位置,“坏数据”产生错误的可能性就越小其他地方的不良影响(例如,在意识到实际上数据为空之前覆盖准备将数据写入其中的文件)。

如果您对调用内部或私有(private)方法的方式有信心,那么在那里不执行检查可能是合适的,但对于公共(public)方法,我认为参数验证几乎总是合适的。

关于c# - 允许 NullReferenceException 发生的可能性是一件坏事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5338776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com