检查属性值是否等于对象列表中的预定义值



>我有两个这样的类

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

最新更新