![](/img/trans.png)
[英]Diferences between IEnumerable<TSource> Where & IQueryable<TSource> Where extension methods
[英]Extension methods resolution IQueryable vs IEnumerable
假设我有一个实现IQueryable<>
(继承IEnumerable<>
)接口的类。
当我在其上调用Where()
方法时,编译器会将此调用解析为IQueryable
扩展,尽管IEnumerable
扩展也定义了Where()
方法。
问题是编译器如何理解应该调用哪个扩展?
C#规范描述了:
7.5.3.5更好的转换目标
给定两种不同类型
T1
和T2
,如果至少有以下一种情况,则T1
是比T2
更好的转换目标:
存在从
T1
到T2
的隐式转换,并且不存在从T2
到T1
隐式转换
T1
是有符号整数类型,T2
是无符号整数类型。
因为存在从IQueryable<T>
到IEnumerable<T>
隐式转换,并且没有从IEnumerable<T>
到IQueryable<T>
隐式转换,所以IQueryable<T>
是更好的转换目标,并且优先。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.