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

例外処理を使用したくない場合は、2 つの方法があります。しかし、それらの本質は同じです。ルックアップ結果を評価して、使用する前に 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;
}

最初のアプローチの利点は、ルックアップを 1 回だけ実行することです。

于 2013-06-15T10:44:00.747 に答える
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")null でないことを確認するだけです。

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

   }
于 2013-06-15T10:41:15.220 に答える