2017-07-18 17 views
5

我有公开课。检查是列表属性的值之一的字符串?

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

我有一个列表。

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

用户将输入一个项目名称,我应该检查该项目名称是否已经在我的itemData的itemName中。

我当前的代码是这样

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

但是,我得到一个错误说的ItemData不能隐式转换为bool。提示将不胜感激

+0

'itemData'当然是一个复杂的对象,而'userInput'只是一个'string'。你会如何比较这些?特别是你的程序应该怎么知道,为了确定相等性,你的对象的'itemName'属性应该不被其他属性使用?这就像比较苹果和橘子。 – HimBromBeere

回答

10

你可以用LINQ轻松实现这一点。

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

Any检查的IEnumerable的所有项目是否匹配给定的谓词,还是不行。

3

既然你有一个List<>并且已经试图用List<T>.Find,这个工程太:

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

当然,如果在列表中没有空引用这仅适用。

相关问题