这个问题是一个延伸部分类型推断如果无法进行部分类型推断,任何人都可以解释 OrderByDescending 扩展方法是如何工作的吗?请注意,当我调用 OrderByDescending(m=>m.DateProp) 时,系统不会要求我提供 Type 参数。
static IOrderedQueryable<TSource> OrderByDescending<TSource, TKey>(
this IQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector);
谁能解释一下 OrderByDescending 扩展方法是如何工作的?
我当然可以。
static IOrderedQueryable<TSource> OrderByDescending<TSource, TKey>
(
this IQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector);
你打电话时foo.OrderByDescending( x => bar )
类型推断按如下方式进行。
- 首先是一组边界
TSource
通过检查推断出foo
.
- 然后我们问“在不知道 TSource 的情况下我们还能做出更多的推论吗?”答案是否定的,所以我们固定
TSource
到绑定集中的最佳成员。叫它S
.
- 然后我们问“鉴于
TSource
is S
,我们可以推断出TKey
?是的。我们应用类型值S
to x
,然后推断表达式的类型bar
在一个环境中x
属于类型S
.
- 的类型
bar
给我们的类型TKey
我们就完成了。
如果部分类型推断不可能,...
部分类型推断不是不可能的。相反,它不是实施的。可以将该功能添加到 C# 中;没有人做到过。
无论如何,无论是否实现或可能从部分边界集进行推断,对调用中的所有类型进行完整推断都没有困难OrderByDescending
。显然我们专门设计了算法来处理OrderByDescending
, Join
等等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)