如何处理可能返回null并生成System.NullReferenceException的方法
本文关键字:System NullReferenceException 方法 null 返回 何处理 处理 | 更新日期: 2023-09-27 18:18:36
我有一个返回类型为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包围它,这似乎根本不是一个好主意。
我正在寻找一个解决这个问题的方法,或者更确切地说,什么是最好的方法。
如果GetAFruit可以返回null,那么(这里是技术位):检查null:
var fruit = store.GetAFruit(...);
if(fruit != null) {
//... Do stuff
}
检查store.GeTAFruit("magic apple")
是否为空:
if (store.GeTAFruit("magic apple") != 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;
}
这可能有帮助
if (store.GeTAFruit("magic apple")!=null) {
store.GeTAFruit("magic apple").Rotten;
}
编辑使其更有效:
var fruit = store.GeTAFruit("magic apple");
if (fruit!=null)) {
fruit.Rotten;
}
定义一个NullFruit: IFruit。