簡體   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