如果一切都按计划进行,我有一些返回值(或对象)的方法,否则返回null(出错了)。
例如,DataTable dt = DoSomething();
如果DoSomething()
中的某些内容爆炸,则返回值为null
,dt
将设置为null
。
在其他情况下,我正在测试一个值,然后在测试值不为null时将变量设置为该值。这感觉不对。我两次调用相同的方法。
例如,if(String.IsNullOrEmpty(getAddresss())){Do Stuff;}如果我在测试之前声明了一个变量,代码可能会在设置时爆炸。如果我测试,那么设置好像我正在重复工作。
测试和处理空值的首选方法是什么?
答案 0 :(得分:6)
从您的方法中抛出异常,而不是让它们返回null
。
无论你在返回代码和异常之间的几乎宗教争论中的立场如何,.NET都建立在通过抛出异常来报告错误的前提下。如果没有别的因为这会对其他人造成不熟悉的话,那么遵循与代码框架的其他部分分离的做法是非常不明智的。
答案 1 :(得分:1)
重复工作 重要吗?毕竟,这都是空检查(阅读:过早优化)。
我不相信有更短的方式,所以只需进行检查。
答案 2 :(得分:0)
另一种方法是在DoSomething()中抛出异常。这样,爆炸的实际原因可以记录,处理,传递等等。
答案 3 :(得分:0)
通常,合并运算符(??
)非常有用:
String myMessage = returnedValue ?? "Unspecified";
如果正在测试的值(在这种情况下为returnedValue
)不是null
,那么它将被返回;否则,返回操作员右侧的值。
这是运营商的C# specification。
答案 4 :(得分:0)
答案 5 :(得分:0)
Code Contracts可以帮助您处理空值。这是一篇简短的介绍http://devjourney.com/blog/code-contracts-part-1-introduction/