Kin*_*tes 142 c# linq linq-to-objects
我经常看到人们使用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*ram 190
在哪里Find上的方法IEnumerable<T>?(修辞问题.)
的Where和FirstOrDefault方法可应用于对多种序列,包括List<T>,T[],Collection<T>,等等实现的任何序列IEnumerable<T>可以使用这些方法.Find仅适用于List<T>.通常更适用的方法更具有可重用性并且具有更大的影响.
我想我的下一个问题是他们为什么要添加查找.这是一个很好的提示.我唯一能想到的是FirstOrDefault可以返回除null之外的其他默认值.否则它似乎是一个毫无意义的补充
Find在List<T>其他方法之前.List<T>在.NET 2.0中添加了泛型,并且Find是该类API的一部分.Where并FirstOrDefault添加为IEnumerable<T>Linq的扩展方法,Linq是后来的.NET版本.我不能肯定地说,如果Linq存在于Find将永远不会添加的2.0版本中,但对于早期.NET版本中的许多其他功能而言,可以说是这种情况,这些功能在以后的版本中已经过时或冗余.
小智 45
我今天刚刚发现,在80K对象列表上做了一些测试,发现它Find()比使用Wherewith 快了1000%FirstOrDefault().直到每个人之前和之后测试一个计时器我都不知道.有时它是同一时间,否则它更快.
Cha*_*lky 29
如果数据源是实体框架,则会有一个非常重要的区别: Find将发现处于"已添加"状态且尚未持久化但未实现的实体Where.这是设计的.
| 归档时间: |
|
| 查看次数: |
102428 次 |
| 最近记录: |