我经常看到人们使用Where.FirstOrDefault()
进行搜索并获取第一个元素。为什么不直接使用Find()
?对方有优势吗?我看不出有什么不同。
namespace LinqFindVsWhere
{
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>();
list.AddRange(new string[]
{
"item1",
"item2",
"item3",
"item4"
});
string item2 = list.Find(x => x == "item2");
Console.WriteLine(item2 == null ? "not found" : "found");
string item3 = list.Where(x => x == "item3").FirstOrDefault();
Console.WriteLine(item3 == null ? "not found" : "found");
Console.ReadKey();
}
}
}
哪儿是Find
方法上IEnumerable<T>
? (反问句。)
The Where
and FirstOrDefault
方法适用于多种序列,包括List<T>
, T[]
, Collection<T>
等任何实现的序列IEnumerable<T>
可以使用这些方法。Find
仅适用于List<T>
。一般情况下比较适用的方法就比较多了reusable并产生较大的影响。
我想我的下一个问题是他们为什么要添加这个发现。这是一个很好的提示。我唯一能想到的是 FirstOrDefault 可以返回除 null 之外的不同默认值。否则它看起来就像是毫无意义的添加
Find
on List<T>
早于其他方法。List<T>
在 .NET 2.0 中添加了泛型,并且Find
是该类 API 的一部分。Where
and FirstOrDefault
添加为扩展方法IEnumerable<T>
使用 Linq,这是更高的 .NET 版本。我不能肯定地说,如果 Linq 与 2.0 版本一起存在Find
永远不会被添加,但对于早期 .NET 版本中出现的许多其他功能来说,可以说是这种情况,而这些功能在以后的版本中已过时或多余。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)