2016-03-31 4 views
4

ループを伴わない簡潔な方法がありますか?そうC# - プロパティに値が等しいオブジェクトがリストに含まれているかどうかを確認しますか?

public enum Item { Wood, Stone, Handle, Flint, StoneTool, Pallet, Bench } 

public struct ItemCount 
{ 
    public Item Item; 
    public int Count; 
} 

private List<ItemCount> _contents; 

のようなもの:あなたはLinq拡張メソッドAnyを使用してこれを行うことが

if(_contents.Contains(ItemCount i where i.Item == Item.Wood)) 
{ 
    //do stuff 
} 
+0

Iを答えに行くつもりだったが、下の2つはupvoteに値する。 Linq.Anyは正しいソリューションです。 –

+0

実際に要素が必要ですか?それとも、それが存在するかどうかを調べるだけですか? –

+0

私はリストに追加しようとしていました。だから、それがなければそれが追加されます。存在する場合は、構造体のintプロパティをインクリメントします。 –

答えて

5

あなたは反射を必要としない、あなただけのLINQを使用することができます。

if (_contents.Any(i=>i.Item == Item.Wood)) 
{ 
    //do stuff 
} 

あなたは、その値を持つオブジェクト/秒が必要な場合は、Where使用することができます。

var woodItems = _contents.Where(i=>i.Item == Item.Wood); 
3

if(_contents.Any(i=> i.Item == Item.Wood)) 
{ 
    // logic 
} 

一致するオブジェクトが必要な場合は、これを実行します。

var firstMatch = _contents.FirstOrDefault(i=> i.Item == Item.Wood); 

if(firstMatch != null) 
{ 
    // logic 
    // Access firstMatch 
} 
関連する問題