【问题标题】:Checking whether a property value equals to a predefined one in a list of objects检查属性值是否等于对象列表中的预定义值
【发布时间】:2019-03-19 16:38:07
【问题描述】:

我有两个这样的课程

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 方法的方法。有没有更简单或更有效的方法来实现这一点?

【问题讨论】:

    标签: c# list linq class


    【解决方案1】:

    列表内每个实例的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) 并且你明白了。

    【讨论】:

      【解决方案2】:

      linq 中的所有内容都将返回 True 或 false

      stockList.All(p => p.Item.Name.ToLower() == "test");
      

      【讨论】:

        【解决方案3】:

        您可以使用 Linq Any() 方法:

        bool containsItemName = stockList.Any(x => x.Item.Name.Equals("MyName", StringComparison.InvariantCultureIgnoreCase));
        

        【讨论】:

          【解决方案4】:

          您真的在查看所有实例吗?从您的问题来看,似乎Any可能是要走的路,请参阅here

          stockList.Any(p =&gt; p.Item.Name.ToLower() == "test");

          【讨论】:

            【解决方案5】:

            你可以通过调用Any得到你想要的结果

            bool result = stockList.Any(
                stock => stock.Item.Name.Equals("text", StringComparison.InvariantCultureIgnoreCase)
            );
            

            在这段代码中,参数名称stock可以随意更改。

            【讨论】:

              猜你喜欢
              • 2016-04-21
              • 2018-06-12
              • 1970-01-01
              • 2018-02-10
              • 1970-01-01
              • 1970-01-01
              • 2018-06-10
              • 1970-01-01
              相关资源
              最近更新 更多