对 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<MyStruct>
,有没有办法使用列表的Contains()
功能?
这不会编译:
if(_myStructList.Contains(x => 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<>
的声明方法,它需要一个对象作为参数,并使用等于来比较对象。
【讨论】:
【参考方案2】:Enumerable 的替代方案。任何不使用 Linq 的都是 List.Exists:
if (_myStructList.Exists(x => x.Name == "DAMN!")) ...
【讨论】:
以上是关于对 List<struct> 执行 LINQ 操作的主要内容,如果未能解决你的问题,请参考以下文章