2017-04-14 109 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