根据函数的表达式参数推断第二个泛型参数

2023-12-05

这个问题是一个延伸部分类型推断如果无法进行部分类型推断,任何人都可以解释 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(使用前将#替换为@)

根据函数的表达式参数推断第二个泛型参数 的相关文章

随机推荐