2017-07-18 2 views
5

Ich habe eine öffentliche Klasse.Überprüfung ist eine Zeichenfolge in einem der Werte der Listeneigenschaft?

public class StoreItems 
{ 
    public string itemName; 
    public string itemPrice; 
    public string itemQuantity; 
} 

Ich habe eine Liste.

public List <StoreItems> itemData = new List<StoreItems>(); 

Der Benutzer wird einen Elementnamen eingeben und soll im, wenn das Element den Namen meines itemData die bereits in itemName ist zu überprüfen.

Mein aktueller Code ist so etwas wie diese

if (itemData.Find(x => x.itemData.Equals(userInput)) 
{ 
    //already in list 
} 
else 
{ 
//add data 
} 

aber ich erhalte eine Fehlermeldung, itemData können nicht implizit in bool umgewandelt werden. Tipps wären willkommen

+0

'itemData' ist natürlich ein komplexes Objekt, während' userInput' nur eine 'string' ist. Wie würdest du diese vergleichen? Insbesondere, wie sollte Ihr Programm wissen, dass zur Bestimmung der Gleichheit die 'itemName'-Eigenschaft Ihres Objekts verwendet werden sollte, keine andere Eigenschaft? Das ist wie der Vergleich von Äpfeln und Orangen. – HimBromBeere

Antwort

10

Sie können dies leicht mit LINQ erreichen.

if(itemData.Any(data => data.itemName == userInput)) 

Any prüft alle Positionen eines IEnumerable, ob sie übereinstimmen ein gegebenes Prädikat, oder nicht.

3

Da Sie ein List<> haben und bereits versucht List<T>.Find zu verwenden, funktioniert dies auch:

StoreItems matchingItem = itemData.Find(si => si.itemName == userInput); 
if (matchingItem != null) 
{ 
    //already in list 
} 
else 
{ 
    //add data 
} 

Natürlich funktioniert dies nur, wenn es kein Nullverweis in der Liste ist.

Verwandte Themen