![](/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.