0

我有一个返回类型的方法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 包围它,这似乎根本不是一个好主意。

我正在寻找解决此问题的方法,或者寻找解决此问题的最佳方法。

4

5 回答 5

2

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

var fruit = store.GetAFruit(...);
if(fruit != null) {
    //... Do stuff
}
于 2013-06-15T10:40:48.493 回答
0

这可能会有所帮助

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

编辑以使其更高效:

var fruit = store.GeTAFruit("magic apple");
if (fruit!=null)) {
    fruit.Rotten;
} 
于 2013-06-15T10:38:18.600 回答
0

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

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

   }
于 2013-06-15T10:41:15.220 回答
0

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

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

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;
}

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

于 2013-06-15T10:44:00.747 回答
0

定义一个 NullFruit : IFruit。如果没有找到,则返回它的一个实例。

于 2013-06-15T12:26:46.613 回答