Find()与Where()。FirstOrDefault()
我经常看到有人使用Where.FirstOrDefault()进行search并获取第一个元素。 为什么不使用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(); } } } 
	
  IEnumerable<T>上的Find方法在哪里?  (修辞问题) 
  Where和FirstOrDefault方法适用于多种序列,包括List<T> , T[] , Collection<T>等。实现IEnumerable<T>任何序列都可以使用这些方法。  Find仅适用于List<T> 。 通常更适用的方法则更具可重用性 ,影响更大。 
我想我的下一个问题是为什么他们添加了查找。 这是一个很好的提示。 我唯一能想到的是FirstOrDefault可以返回一个不同于null的默认值。 否则,这似乎是一个毫无意义的补充
 在List<T> Find List<T>早于其他方法。  List<T>在.NET 2.0中添加了generics,而Find则是该类的API的一部分。  Where和FirstOrDefault作为IEnumerable<T>扩展方法添加到Linq(后来的.NET版本)中。 我不能肯定地说,如果Linq在2.0发行版中存在,那么Find将永远不会被添加,但是对于早期的.NET版本中的许多其他function来说,情况可能已经变得过时,或者由于以后的版本而变得冗余。 
 我今天刚刚发现,在80K对象列表上做了一些testing,发现Find()速度比使用FirstOrDefault()的Where快了1000%。 我不知道,直到每一个testing之前和之后的计时器。 有时候是同一时间,否则速度会更快。 
  Find仅在List<T> ,而Where().FirstOrDefault()与所有IEnumerable<T> Where().FirstOrDefault()工作。 
 如果数据的来源是entity framework,则有一个非常重要的区别: Find将find“已添加”状态的实体,但尚未持续,但Where不会。 这是devise。