【问题标题】:Performing LINQ operations on List<struct>对 List<struct> 执行 LINQ 操作
【发布时间】:2012-12-21 04:59:06
【问题描述】:

我有一个这样的结构

public struct MyStruct
{
     public string Name;
     //More fields and construtors
}

现在如果我有List&lt;MyStruct&gt;,有没有办法使用列表的Contains() 功能?

这不会编译:

if(_myStructList.Contains(x =&gt; x.Name == "DAMN!")){//DO STUFF}

这是错误:

Cannot convert lambda expression to type 'MyStruct' because it is not a delegate type

我想这不适用于结构?!

【问题讨论】:

  • 您似乎缺少 if 的右括号?
  • 这只是问题中的一个错字,我拥有的实际代码没有语法错误!感谢您指出
  • Contains 需要一个 MyStruct 的实例,它需要覆盖相等比较才能匹配。根据 Rafal 的回答,使用 Any 将是一个更好的解决方案。
  • 为了方便以后的搜索,本题报告的错误文字对应错误代码CS1660

标签: c# linq


【解决方案1】:

在 LiNQ 中尝试Any() 方法:

using System.Linq;

if(_myStructList.Any(x => x.Name == "DAMN!")) ...

Contains()List&lt;&gt; 的声明方法,它需要一个对象作为参数,并使用等于来比较对象。

【讨论】:

    【解决方案2】:

    Enumerable 的替代方案。任何不使用 Linq 的都是 List.Exists

    if (_myStructList.Exists(x => x.Name == "DAMN!")) ...
    

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2017-02-02
      • 2011-03-04
      • 1970-01-01
      • 2017-04-29
      相关资源
      最近更新 更多