2016-03-31 16 views
4

Gibt es eine Kurzform, die ohne Schleifen auskommt?C# - prüfen, ob die Liste ein Objekt enthält, in dem eine Eigenschaft dem Wert entspricht?

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

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

private List<ItemCount> _contents; 

so etwas wie:

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

I würde antworten, aber die beiden unten verdient und upvote. Linq.Any ist die richtige Lösung. –

+0

Brauchen Sie das Element wirklich? Oder machst du nur Lookups, um zu sehen, ob es existiert? –

+0

Ich wollte zu der Liste hinzufügen. Also, wenn es nicht da ist, wird es es hinzufügen; Wenn es dort ist, wird es die int-Eigenschaft der Struktur inkrementieren. –

Antwort

5

Sie haben keine Reflexion benötigen, können Sie nur Linq verwenden:

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

Wenn Sie das Objekt/s mit diesem Wert benötigen, können Sie verwenden Where:

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

Sie könnten diese mit Linq Erweiterungsmethode Any tun.

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

Falls Sie ein passendes Objekt benötigen, tun Sie dies.

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

if(firstMatch != null) 
{ 
    // logic 
    // Access firstMatch 
} 
Verwandte Themen