在 List<struct> 上执行 LINQ 操作

3

我有一个像这样的结构体

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

我猜这就意味着这在结构体中行不通了?!

2
您好像漏掉了if语句的闭合括号? - lahsrah
那只是问题中的一个笔误,我实际拥有的代码没有语法错误!不过还是谢谢你指出来。 - Dumbo
Contains函数需要一个MyStruct实例,该实例需要重写相等比较以匹配。根据Rafal的回答,使用Any会是更好的解决方案。 - SpaceBison
为了帮助未来的搜索,此问题中报告的错误文本对应于错误代码CS1660 - DavidRR
2个回答

13

尝试使用 LiNQ 中的 Any() 方法:

using System.Linq;

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

Contains() 是一个声明的 List<> 方法,它期望一个对象作为参数,并使用 equals 方法来比较这些对象。


5

一个不使用Linq的Enumerable.Any的替代方案是List.Exists

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接