[这是最佳实践的结果:函数应该返回null还是空对象?但我想要非常一般.]
在很多传统的(嗯...生产)C++代码,我所看到的,有写的倾向大量的NULL(或类似)的检查,以测试指针.在添加NULL时,许多这些都会在发布周期结束时添加 - 检查可以快速解决由指针取消引用导致的崩溃问题 - 而且没有太多时间进行调查.
为了解决这个问题,我开始编写带有(const)引用参数的代码,而不是传递指针的(更多)常见技术.没有指针,没有检查NULL的愿望(忽略实际具有空引用的角落情况).
在C#中,存在相同的C++"问题":希望检查针对null(ArgumentNullException)的每个未知引用并NullReferenceException通过添加null检查来快速修复s .
在我看来,防止这种情况的一种方法是首先使用空对象(String.Empty,EventArgs.Empty)来避免空对象.另一个是抛出异常而不是返回null.
我刚刚开始学习F#,但看起来在那个环境中有更少的空对象.那么也许你真的不需要有很多null参考文献?
我在这里吠叫错了吗?
Rex*_*x M 26
传递非null只是为了避免NullReferenceException正在交易一个直接的,易于解决的问题("它会因为它为空而爆炸"),这是一个更加微妙,难以调试的问题("几个调用堆栈的东西"不是表现得像预期的那样,因为早些时候它得到了一些没有有意义的信息但不是空的对象").
NullReferenceException是一件很棒的事情!它失败,大声,快速,几乎总是快速,容易地识别和修复.这是我最喜欢的例外,因为我知道当我看到它时,我的任务只需要大约2分钟.将此与令人困惑的质量保证或客户报告进行对比,试图描述必须复制并追溯到原点的奇怪行为.呸.
这一切都归结为你作为一种方法或一段代码,可以合理地推断出调用你的代码.如果你被提交了一个空引用,并且你可以合理地推断出调用者的意思可能是null(例如,可能是一个空集合?)那么你绝对应该只处理空值.但是,如果您无法合理地推断如何处理null,或者调用者的意思是null(例如,调用代码告诉您打开文件并将该位置赋值为null),则应抛出ArgumentNullException .
在每个"网关"点维护这样的正确编码实践 - 代码中功能的逻辑界限 - NullReferenceExceptions应该更加罕见.
Null 得到我的投票。再说一次,我是“快速失败”的心态。
String.IsNullOrEmpty(...)也很有帮助,我想它可以捕获任何一种情况:空字符串或空字符串。你可以为你传递的所有类编写一个类似的函数。
| 归档时间: |
|
| 查看次数: |
13293 次 |
| 最近记录: |