如何处理可能返回null并生成System.NullReferenceException的方法

时间:2013-06-15 10:32:53

标签: c# oop null return return-value

我有一个返回类型为Fruit的方法,它执行以下操作:

Search for the right apple, if it matches return it; else
Search for the right banana, if it matches return it; else
Search for the right orange, if it matches return it; else
return null

Fruit是一个具有以下内容的接口:

bool Rotten { get; set; }

问题在于,当我尝试使用它时:

store.GeTAFruit("magic apple").Rotten;

如果找不到水果,它将返回null,这将得到NullReferenceException

当然我可以用try catch包围它,但这意味着每次我使用这个函数时我都必须用try catch包围它,这看起来根本不是一个好主意。

我正在寻找解决这个问题的方法,或者更确切地说是最好的方法。

5 个答案:

答案 0 :(得分:2)

如果GetAFruit可以返回null,那么(这里是技术位):检查为空

var fruit = store.GetAFruit(...);
if(fruit != null) {
    //... Do stuff
}

答案 1 :(得分:0)

这可能会有所帮助

if (store.GeTAFruit("magic apple")!=null) {
store.GeTAFruit("magic apple").Rotten;
} 

编辑以提高效率:

var fruit = store.GeTAFruit("magic apple");
if (fruit!=null)) {
    fruit.Rotten;
} 

答案 2 :(得分:0)

只需检查store.GeTAFruit("magic apple")是否为空:

   if (store.GeTAFruit("magic apple") != null) {

   }

答案 3 :(得分:0)

如果您不想使用异常处理,有两种方法。但它们的本质是一样的。在使用之前,您必须评估查找结果以将其测试为null。

第一个选项是将查找结果分配给变量,然后在使用之前测试它。

Fruit fruit = store.GeTAFruit("magic apple");
if(fruit != null)
{
    //safely use your Rotten property
    bool lFlag = fruit.Rotten;
}

另一种方法是测试它......

if(store.GeTAFruit("magic apple") != null)
{
    store.GetTAFruit("magic apple").Rotten;
}

第一种方法的好处是您只执行一次查找。

答案 4 :(得分:0)

定义NullFruit:IFruit。如果找不到任何内容,则返回它的实例。