>我有两个这样的类
public class Stock
{
public StockItem Item;
public string Location;
public int Quantity;
public string Price;
}
public class StockItem
{
public string Code;
public string Name;
public string Unit;
}
我有一个列表,其中包含Stock
类的多个实例
var stockList = new List<Stock>();
我正在尝试确定列表中每个实例的Name
属性是否等于预定义的字符串。目前,我正在像这样循环浏览列表
foreach (var stock in stockList)
{
if (stock.Item.Name.ToLower() == "test")
{
Console.WriteLine("Found the class")
break;
}
}
但是,我想知道是否有更有效的方法可以使用 Linq 或类似于.Contains
方法的方法来完成此操作。有没有更简单或更有效的方法来实现这一点?
列表中每个实例的 Name 属性是否相等 到预定义的字符串
效率不高,但更简单:
bool allAreEqual = stockList.All(x => x.Item.Name.Equals("test", StringComparison.OrdinalIgnoreCase))
如果你想找到第一个与条件匹配的(你的循环真正做什么(:
Stock si = stockList.FirstOrDefault(x => x.Item.Name.Equals("test", StringComparison.OrdinalIgnoreCase));
现在你知道这样的Stock
是否存在(si != null
(,你得到了它。
all in linq 将返回 True 或 false
stockList.All(p => p.Item.Name.ToLower() == "test");
您可以使用LinqAny()
方法:
bool containsItemName = stockList.Any(x => x.Item.Name.Equals("MyName", StringComparison.InvariantCultureIgnoreCase));
你真的在看所有实例吗?从你的问题来看,似乎Any
可能是要走的路,看这里。
stockList.Any(p => p.Item.Name.ToLower() == "test");
您可以通过调用Any
来获得您想要的结果
bool result = stockList.Any(
stock => stock.Item.Name.Equals("text", StringComparison.InvariantCultureIgnoreCase)
);
在此代码中,可以根据需要更改参数名称stock
。