AsEnumerable()vs.“as IEnumerable <t>”

时间:2015-05-05 19:50:03

标签: c# linq ienumerable

之间有什么区别
(db.Records as IEnumerable<Record>).Where(...)

(db.Records.AsEnumerable()).Where(...).

AsEnumerable()只是source as IEnumerable<T>的快捷方式吗?

我已阅读https://msdn.microsoft.com/en-us/library/bb335435(v=vs.90).aspx,但未找到任何相关信息。

2 个答案:

答案 0 :(得分:6)

不同之处在于,您可以在AsEnumerable上致电IEnumerable<T>,其中T是匿名类型,并且您无法对此类序列执行此类投射,因为您无法输入没有名称的类型的名称。 AsEnumerable推断泛型参数的这种能力是它存在的原因。

(它也可以说是更清晰的语法,但在匿名类型之外,这不是功能差异,仅仅是个人偏好。)

答案 1 :(得分:0)

该文章有两个相关部分。

首先,

  

AsEnumerable(IEnumerable)方法除了将源代码的编译时类型从实现IEnumerable的类型更改为IEnumerable本身外无效。

第二,

  

如果不需要远程执行,例如因为谓词调用本地方法,则AsEnumerable方法可用于隐藏自定义方法,而是使标准查询运算符可用。

换句话说,是的,它看起来像一个捷径。但是,它意味着在Where和其他IEnumerable<T>方法的内存操作中强制执行基础类型的实际实现。