2017-07-18 10 views
5

Mam klasę publiczną.Sprawdzanie jest ciągiem w jednej z wartości właściwości listy?

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

Mam listę.

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

Użytkownik będzie wprowadzić nazwę elementu i IM powinien sprawdzić, czy nazwa ta pozycja będzie już w moim itemData za ItemName.

Mój obecny kod jest coś takiego

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

Jednak dostaję błąd mówiąc itemData nie można niejawnie konwertowane do bool. Wskazówki byłyby doceniane:

+0

'itemData' to oczywiście obiekt złożony, podczas gdy' userInput' to po prostu 'ciąg'. Jak porównałbyś te? W szczególności, w jaki sposób program powinien wiedzieć, że w celu ustalenia równości należy użyć właściwości 'itemName 'obiektu, a nie jakiejkolwiek innej własności? To jest jak porównywanie jabłek i pomarańczy. – HimBromBeere

Odpowiedz

10

Możesz to łatwo osiągnąć dzięki LINQ.

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

Any sprawdza wszystkie pozycje w IEnumerable czy pasują one dany predykat, czy nie.

3

Skoro masz List<> i już próbował użyć List<T>.Find to działa zbyt:

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

Oczywiście działa to tylko wtedy, gdy nie ma null odniesienia na liście.

Powiązane problemy