繁体   English   中英

根据函数的表达式参数推断第二个通用参数

[英]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的情况下还能做出更多推断吗?” 答案是否定的,因此我们将TSource的值固定为绑定集的最佳成员。 称之为S
  • 然后我们问“给定TSource值为S ,可以推断TKey的值吗?是。我们将类型值S应用于x ,然后在x的类型为S的环境中推断表达式bar的类型。
  • bar的类型为我们提供了TKey的类型,我们就完成了。

如果无法进行部分类型推断,则...

部分类型推断并非不可能 相反,它没有实现 可以将功能添加到C#中。 没有人做到这一点。

无论是否实现了从局部范围的推理,或者在可能的情况下,在对OrderByDescending的调用中对所有类型进行完整的推理都没有困难。 显然,我们专门设计了算法来处理OrderByDescendingJoin等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM