[英]C# 3.0 Func/OrderBy type inference
我今天和OrderBy碰到了奇怪的情況:
Func<SomeClass, int> orderByNumber =
currentClass =>
currentClass.SomeNumber;
然后:
someCollection.OrderBy(orderByNumber);
這很好,但我打算創建一個方法,因為它可能在除orderBy之外的其他地方可用。
private int ReturnNumber(SomeClass currentClass)
{
return currentClass.SomeNumber;
}
現在,當我嘗試將其插入OrderBy時:
someCollection.OrderBy(ReturnNumber);
如果我使用Func,它無法推斷它的類型。 在我看來它們應該是相同的,因為方法本身就像Func一樣是“強類型”的。
旁注:我意識到我可以這樣做:
Func<SomeClass, int> orderByNumber = ReturnNumber;
這也可能與“返回類型推斷”無關,而不適用於方法組 。
本質上,在通用參數僅在輸入位置的情況下(如Where
的謂詞),方法組轉換工作正常。 但是在泛型參數是返回類型(如Select
或OrderBy
投影)的情況下,編譯器不會推斷出適當的委托轉換。
ReturnNumber
不是一個方法 - 相反,它表示一個方法組,其中包含名為ReturnNumber
但具有可能不同的arity-and-type簽名的所有方法。 有一些技術問題可以通過非常通用和每次工作的方式確定您實際想要的方法組中的哪種方法。 顯然,編譯器可以在某些時候,甚至是大多數時候都能找到它,但是決定將算法放入編譯器只能工作一半的時間是一個壞主意。
但是,以下工作:
someCollection.OrderBy(new Func<SomeClass, int>(ReturnNumber))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.