2017-03-26 10 views
1

以下のコードはインベントリクラス用のコードです。ここでは、(指定されたIDを使用している)アイテムがインベントリクラスにあるかどうかをチェックし、それがない場合は、アイテムタイプのnullオブジェクト(別のクラスを作成しました)を返す必要がありますが、フェッチが常に何かを返すとは限りません。わからないのかどうかわかりません。C#変数をnullとして後で返すようにする

public Item Fetch(string id) 
{ 
    Item Empty = null; 
    foreach (Item i in _items) 
    { 
     if (i.AreYou(id) == true) 
      return i; 
     else 
      return Empty; 
    } 
} 

答えて

5

_itemsが空の場合どうなるかを検討してください。そのシナリオでは戻り値はありません。代わりにループの後にEmptyを返す必要があります。あなたがエラーを取得している理由は、あなたのコードのみ_itemsの最初の項目に実行されることである

public Item Fetch(string id) 
{ 
    return _items.FirstOrDefault(i => i.AreYou(id)); 
} 
+0

特に、VSのエラーは_itemsが空である可能性があるため、全く実行されないreturn文はありません。 –

1

:代替として、この全体の方法は、単にLINQを使用して書き換えることができ

public Item Fetch(string id) 
{ 
    Item Empty = null; 
    foreach (Item i in _items) 
    { 
     if (i.AreYou(id) == true) 
      return i; 
    } 
    return Empty; // We didn't find any matches 
} 

コレクション。空の場合は、foreachは入力されません。

public Item Fetch(string id) 
{ 
    foreach (Item i in _items) 
    { 
     if (i.AreYou(id) == true) 
      return i; 
    } 

    return null; 
} 
関連する問題