Enumerable.AsEnumerable<>() 是不是强制评估表达式? [复制]

Posted

技术标签:

【中文标题】Enumerable.AsEnumerable<>() 是不是强制评估表达式? [复制]【英文标题】: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#)。它有一个很好的表,每个方法和它的执行类型 【参考方案1】:

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

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

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

【讨论】:

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

以上是关于Enumerable.AsEnumerable<>() 是不是强制评估表达式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何循环遍历行,然后在每行循环遍历列直到找到NA,然后提取前一列的值

r plotly 3d曲面图问题

第四周—深层神经网络

超过常规语言 L 和 D(L)

如果 L 和 L 补码是递归可枚举的,那么为啥 L 不能是正则语言?

神经网络与深度学习笔记(番外)反向传播推导