2017-04-14 125 views
0

可以說我有三個對象如何總結多個對象一起

object o1, o2, o3 

這些對象的

o1 = 1 

o2 = 2 

o3 = 3 

值爲了簡單起見

現在我想補充這些對象一起得到6的總和,但+運算符不能用於對象。這些對象可以用什麼方法進行總結而不需要廣泛地轉換它們?

使用對象而不是int等的原因是由於使用了由SQL查詢填充的DataTable。然後,我從該DataTable中獲取一個值,並將其分配給o1作爲示例。

+4

以int形式獲取數據表中的值。投它。 – Jonesopolis

+0

你可以修改sql查詢來使用這樣的查詢來計算這些值,然後只是將值轉換爲一個'int'? – dcg

+0

@Jonesopolis我寧願將對象轉換爲int,因爲在我需要它作爲int之前,我將它用作對象。如何將對象有效地轉換爲int? –

回答

3

如果實際製作自己的對象類型,則可以重載加號運算符。例如,我懷疑還有其他方法可以做到這一點,例如:

然後,我從該DataTable中獲取一個值,並將其作爲示例分配給o1。

您可以在當時將它分配給int。但是,如果你真的想使用一些對象,因爲你需要在未來創造出更多的行爲,你將對象類型:Q

// overload operator + 
    public static YourObject operator +(YourObject a, YourObject b) 
    { 
     return new YourObject(a.theValuePropertyInt + b.theValuePropertyInt); 
    } 

但你不會是能夠總結類型的C#的Object,因爲它不會使+運算符超載。

基本上,您正試圖在不告訴編譯器需要int行爲的情況下使用特定於對象的行爲(整數數學)。

最終,問這是否只是一個int,或其他類型。如果它真的只是一個int,就會在您提取時投射。

1

以下應該給你的答案,但理想情況下,它會更好地保持使用DataReader從數據庫完整的int類型。

public int SumMyObjects(List<object> objs) 
{ 
    int sum =0; 
    foreach(var obj in objs) 
    { 
     try 
     { 
     sum += Convert.ToInt32(obj); 
     } 
     catch 
     { 
     // obj wasn't a valid int 
     } 
    } 
    return sum; 
} 
+0

我會厭倦使用Convert.ToInt32。如果'object s =(char)'a';'那麼這會起作用,但會不正確。實際上什麼時候會拋出?當'sum'太大?我想你會想''int.TryParse(s?.ToString(),out var result)',如果那是真的,那麼把它加到sum中。在這種情況下,它應該沒問題,因爲他從默認情況下以int方式提取數據,但總的來說我不會這樣做。 – KSib

+0

https://dotnetfiddle.net/M6asaL – KSib