2012-03-12 64 views
3

我本來應該寫一個方法,它會對整數,浮點數或雙精度的集合進行加法。我將編寫三種方法,它們將遍歷三種不同的類型執行添加並返回值。有用。我只是好奇,這是可以在一個單一的方法,該類型傳遞AA泛型類型來完成,像如何使用泛型爲多種數據類型創建通用方法?

public static T SUM<T>(IEnumerable<T> dataCollection) 
{ 
T total; 
foreach(var value in dataCollection) 
total += value; 
return total; 
} 

我能夠正常三法實現,但只是好奇,想解決它,就是它甚至可能嗎?

感謝,

回答

6

它無法在其上鍵入的泛型參數表達式中使用運營商如+/-/*/etc ...。這些僅在處理具體類型時才起作用。

要做到這一點與泛型,你需要通過一個抽象,明白如何操作+的實際類型T。例如,這裏有一個例子拉姆達

public static T SUM<T>(IEnumerable<T> dataCollection, Func<T, T, T> sum) 
{ 
    T total = default(T); 
    foreach(var value in dataCollection) 
    total = sum(total, value); 
    return total; 
} 

List<int> list = ...; 
list.Sum((left, right) -> left + right); 

注:正如一些人指出我寫到這裏的功能是System.Linq.Enumerable.Aggregate基本相同。請使用該代碼與將其放入代碼中。

+0

很好的解釋。 – Nair 2012-03-12 21:42:47

+0

當然,這只不過是一個roll-your-own的Aggregate()函數,因爲傳遞的lambda可以是從左到右的任何內容。 – KeithS 2012-03-12 21:45:28

+1

@Nair,請注意,這個函數已經存在[Enumerable.Aggregate](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aggregate.aspx),請嘗試使用它相反,除非你這樣做來學習一些東西。 – 2012-03-12 21:46:42

相關問題