我有一个返回类型为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包围它,这看起来根本不是一个好主意。
我正在寻找解决这个问题的方法,或者更确切地说是最好的方法。
答案 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。如果找不到任何内容,则返回它的实例。