1
我很困惑LINQ求和方法是如何工作的。 因此,我們有例如一個int
陣列和INT結構不具有sum
方法。Enumerable.Sum如何綁定到數組類型?
但是當我們包括LINQ,奇蹟般地它。 總和方法如何添加到結構中,以便我們可以調用arr.sum()
?通過某種繼承或如何?
我很困惑LINQ求和方法是如何工作的。 因此,我們有例如一個int
陣列和INT結構不具有sum
方法。Enumerable.Sum如何綁定到數組類型?
但是當我們包括LINQ,奇蹟般地它。 總和方法如何添加到結構中,以便我們可以調用arr.sum()
?通過某種繼承或如何?
如何被添加到結構
大多數集合類實現IEnumerable<T>
總和法。 Sum
,在你的榜樣,是IEnumerable<T>
的extension method。
擴展方法基本上是靜態類用靜態方法,其中每個方法的第一值被加到所述this
關鍵字。這樣,編譯器將其識別爲應用於該類型的擴展方法。
這裏是Enumerable.Sum
在它的上IEnumerable<decimal>
宣佈最簡單的形式:
public static decimal Sum(this IEnumerable<decimal> source)
{
if (source == null) throw Error.ArgumentNull("source");
decimal sum = 0;
foreach (decimal v in source) sum += v;
return sum;
}
還有的Sum
許多重載,每一個不同類型的組成和浮點類型的。如果你有興趣,他們可以找到here。 所有擴展方法都應用於給定類型。假設一個數組實現了IEnumerable<T>
,它也將這些方法作爲附加。
所以你告訴我,任何類型的相匹配的擴展方法的參數,可以使用像它分機方法是其中的一部分(使用。運算符)? – CuriousGuy
@CuriousGuy這就是我所說的,是的。你可以自己嘗試一下。爲「int」或「string」創建一個擴展方法,並查看魔術的發生。 –
@CuriousGuy他不僅在說,它也是如此。 – Martijn