对 List<struct> 执行 LINQ 操作

Posted

技术标签:

【中文标题】对 List<struct> 执行 LINQ 操作【英文标题】:Performing LINQ operations on List<struct> 【发布时间】: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 【参考方案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!")) ...

【讨论】:

以上是关于对 List<struct> 执行 LINQ 操作的主要内容,如果未能解决你的问题,请参考以下文章

嵌套结构中的指针在c中不是NULL

2017年吉林大学考研初试专业课966 第七题

Java List排序

list双向链表容器

mysql-语句查询执行顺序

SQL逻辑查询语句执行顺序