![](/img/trans.png)
[英]C# Generic method that can infer its type argument from expression parameter
[英]Infer second generic parameter based on the expression argument of the function
这个问题是对部分类型推断的扩展如果无法进行部分类型推断,那么谁能解释一下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 )
类型推断如下进行。
foo
来推断TSource
一组边界。 TSource
的值固定为绑定集的最佳成员。 称之为S
TSource
值为S
,可以推断TKey
的值吗?是。我们将类型值S
应用于x
,然后在x
的类型为S
的环境中推断表达式bar
的类型。 bar
的类型为我们提供了TKey
的类型,我们就完成了。 如果无法进行部分类型推断,则...
部分类型推断并非不可能 。 相反,它没有实现 。 可以将功能添加到C#中。 没有人做到这一点。
无论是否实现了从局部范围的推理,或者在可能的情况下,在对OrderByDescending
的调用中对所有类型进行完整的推理都没有困难。 显然,我们专门设计了算法来处理OrderByDescending
, Join
等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.