2011-08-31 61 views
0

我有這樣的代碼:計算對象值序列的System.Array的實例內的總和

private object Add(object a, object b) 
{ 
    // Assume: a and b are the same types. 
    // Assume: a and b are numeric types (ex. int). 

    Array array = Array.CreateInstance(a.GetType(), 2); 
    array.SetValue(a, 0); 
    array.SetValue(b, 1); 

    // Is it possible to return the Sum of the values inside the Array instance? 
} 

有許多可供選擇(當然更好)的方式來做到這一點使用的規則陣列,泛型或者避免傳遞對象,只傳遞int,double等。

試圖弄清楚這是否可能(不使用動態基元類型)。

+1

如果類型是對象,你如何定義加法操作?編譯器不會喜歡你試圖添加兩個'object'的事實,除非它能推斷出如何添加它們。 – Icarus

+0

@伊卡洛斯是真的。使用動態基元類型可以推斷出它。但似乎用其他方式是不可能的。 :( –

+0

泛型也會在這裏失敗,但C++模板可以正常工作。 –

回答

2

如果您知道該數組只包含整數,你可以這樣做:

int sum = array.Cast<int>().Sum(); 

如果數組包含整數值,但是你不知道它們的類型,你可以嘗試這樣的事情:

long sum = array.Cast<object>().Select(o => Convert.ToInt64(o)).Sum();