LINQ的延迟执行:



为什么会这样,因为IEnumberable的Where方法是延迟执行的:

此方法通过使用延迟执行实现。即时返回值为一个对象,该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

因此第一个例子中,Where中保存了一个vowel的引用,当执行查询的时候,foreach已经执行完,此时vowel的值为‘u’,故有此结果。

第2个例子中,Where保存的是temp的引用,可是因为foreach每次循环都会声明temp并赋值,因此实际有5个temp的值被保存,当foreach执行完之后,再调用其他能触发查询的方法便得到的是如上结果。相当于委托链有5个方法并以此执行:

1 query = query.Where (c => c != 'a');
2 query = query.Where (c => c != 'e');
3 query = query.Where (c => c != 'i');
4 query = query.Where (c => c != 'o');
5 query = query.Where (c => c != 'u');

相关文章:

  • 2021-06-03
  • 2021-10-07
  • 2021-12-02
  • 2022-01-09
  • 2022-12-23
  • 2022-12-23
  • 2021-07-06
猜你喜欢
  • 2022-01-02
  • 2022-12-23
  • 2021-09-23
  • 2022-12-23
  • 2021-05-31
  • 2021-11-16
相关资源
相似解决方案