【问题标题】:Does Enumerable.AsEnumerable<>() force the evaluation of the expression? [duplicate]Enumerable.AsEnumerable<>() 是否强制评估表达式? [复制]
【发布时间】:2020-11-19 13:43:13
【问题描述】:
string[] fruits = { "apple", "passionfruit", "banana", "mango",
                  "orange", "blueberry", "grape", "strawberry" };
List<int> lengths = fruits.Select(fruit => fruit.Length).ToList();

Enumerable.ToList()Enumerable.ToArray() 执行急切评估,它们强制评估。 Enumerable.AsEnumerable() 也一样吗?

谢谢

【问题讨论】:

  • 您是在谈论 Xamarin 的 ToEnumerable 还是 .NET 的 AsEnumerable(“To”或“As”)?你在标题中说一个,在问题中说另一个
  • AsEnumerable 不做任何事情。 ToEnumerable 我不确定
  • @ShamPooSham 我刚刚编辑了问题,抱歉并感谢您的回答
  • Msdn 有一篇文章Classification of Standard Query Operators by Manner of Execution (C#)。它有一个很好的表,每个方法和它的执行类型

标签: c# linq enumerable


【解决方案1】:

简而言之,没有。它什么都不做,它只是返回输入集合,用不同的接口输入。

IQueryable&lt;T&gt; 切换到IEnumerable&lt;T&gt; 的唯一实际目的是使用可枚举版本而不是可查询版本执行进一步的 LINQ 方法,从而使评估转到“客户端”。

但是,它本身并没有做任何事情。

【讨论】:

  • 你是对的,但在客户端进行评估并非完全没有:它可能涉及将大量数据从数据库传输到客户端。这就是为什么在最新的 EF 版本上这种转换不再是自动的。
  • @XavierAM 它本身什么也不做。它只会改变持有它的变量的编译时类型,这反过来会导致进一步的调用选择不同的重载。使用强制转换或 as 关键字也有相同的效果。
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 2012-12-26
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多