检查和处理空返回值的正确方法是什么?

时间:2011-03-07 18:03:34

标签: c#

如果一切都按计划进行,我有一些返回值(或对象)的方法,否则返回null(出错了)。

例如,DataTable dt = DoSomething();如果DoSomething()中的某些内容爆炸,则返回值为nulldt将设置为null

在其他情况下,我正在测试一个值,然后在测试值不为null时将变量设置为该值。这感觉不对。我两次调用相同的方法。

例如,if(String.IsNullOrEmpty(getAddresss())){Do Stuff;}如果我在测试之前声明了一个变量,代码可能会在设置时爆炸。如果我测试,那么设置好像我正在重复工作。

测试和处理空值的首选方法是什么?

6 个答案:

答案 0 :(得分:6)

从您的方法中抛出异常,而不是让它们返回null

无论你在返回代码和异常之间的几乎宗教争论中的立场如何,.NET都建立在通过抛出异常来报告错误的前提下。如果没有别的因为这会对其他人造成不熟悉的话,那么遵循与代码框架的其他部分分离的做法是非常不明智的。

答案 1 :(得分:1)

重复工作 重要吗?毕竟,这都是空检查(阅读:过早优化)。

我不相信有更短的方式,所以只需进行检查。

答案 2 :(得分:0)

另一种方法是在DoSomething()中抛出异常。这样,爆炸的实际原因可以记录,处理,传递等等。

答案 3 :(得分:0)

通常,合并运算符(??)非常有用:

String myMessage = returnedValue ?? "Unspecified";

如果正在测试的值(在这种情况下为returnedValue)不是null,那么它将被返回;否则,返回操作员右侧的值。

这是运营商的C# specification

答案 4 :(得分:0)

一切都取决于返回null的原因。

你能做的是:

  1. Use Null pattern
  2. throw an own Exception

答案 5 :(得分:0)

Code Contracts可以帮助您处理空值。这是一篇简短的介绍http://devjourney.com/blog/code-contracts-part-1-introduction/