我有一个包含对象集合的列表。如何在此列表中搜索object.Property == myValue的项目?
object.Property == myValue
41ik7eoe1#
你有几个选择:1.使用Enumerable.Where和Enumerable.FirstOrDefault:
list.Where(i => i.Property == value).FirstOrDefault(); // C# 3.0+
1.使用Enumerable.FirstOrDefault本身:
list.FirstOrDefault(i => i.Property == value); // C# 3.0+
1.使用List.Find:
list.Find(i => i.Property == value); // C# 3.0+ list.Find(delegate(Item i) { return i.Property == value; }); // C# 2.0+
如果没有找到匹配项,所有这些选项都返回default(T)(引用类型为null)。正如下面的注解中所提到的,您应该为您的场景使用适当的比较形式:
default(T)
null
==
object.Equals(a, b)
string.Equals(a, b, StringComparison)
object.ReferenceEquals(a, b)
83qze16e2#
List.Find有什么问题??我认为我们需要更多的信息,你做了什么,为什么它失败了,在我们可以提供真正有用的答案。
nxowjjhe3#
var myItem = myList.Find(item => item.property == "something");
vktxenjb4#
item = objects.Find(obj => obj.property==myValue);
1l5u6lss5#
list.FirstOrDefault(i => i.property == someValue);
这是基于德鲁的回答上面,但更简洁一点。
h7appiyu6#
对于.NET 2.0:
list.Find(delegate(Item i) { return i.Property == someValue; });
6条答案
按热度按时间41ik7eoe1#
你有几个选择:
1.使用Enumerable.Where和Enumerable.FirstOrDefault:
1.使用Enumerable.FirstOrDefault本身:
1.使用List.Find:
如果没有找到匹配项,所有这些选项都返回
default(T)
(引用类型为null
)。正如下面的注解中所提到的,您应该为您的场景使用适当的比较形式:
==
用于简单值类型或需要使用运算符重载的情况object.Equals(a, b)
,适用于类型未知或比较可能已被覆盖的大多数情况string.Equals(a, b, StringComparison)
用于比较字符串object.ReferenceEquals(a, b)
用于身份比较,这通常是最快的83qze16e2#
List.Find有什么问题??
我认为我们需要更多的信息,你做了什么,为什么它失败了,在我们可以提供真正有用的答案。
nxowjjhe3#
vktxenjb4#
1l5u6lss5#
这是基于德鲁的回答上面,但更简洁一点。
h7appiyu6#
对于.NET 2.0: