可以说我有三个对象如何总结多个对象一起
object o1, o2, o3
这些对象的
o1 = 1
o2 = 2
o3 = 3
值为了简单起见
现在我想补充这些对象一起得到6的总和,但+
运算符不能用于对象。这些对象可以用什么方法进行总结而不需要广泛地转换它们?
使用对象而不是int
等的原因是由于使用了由SQL查询填充的DataTable
。然后,我从该DataTable
中获取一个值,并将其分配给o1
作为示例。
可以说我有三个对象如何总结多个对象一起
object o1, o2, o3
这些对象的
o1 = 1
o2 = 2
o3 = 3
值为了简单起见
现在我想补充这些对象一起得到6的总和,但+
运算符不能用于对象。这些对象可以用什么方法进行总结而不需要广泛地转换它们?
使用对象而不是int
等的原因是由于使用了由SQL查询填充的DataTable
。然后,我从该DataTable
中获取一个值,并将其分配给o1
作为示例。
如果实际制作自己的对象类型,则可以重载加号运算符。例如,我怀疑还有其他方法可以做到这一点,例如:
然后,我从该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
,就会在您提取时投射。
以下应该给你的答案,但理想情况下,它会更好地保持使用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;
}
以int形式获取数据表中的值。投它。 – Jonesopolis
你可以修改sql查询来使用这样的查询来计算这些值,然后只是将值转换为一个'int'? – dcg
@Jonesopolis我宁愿将对象转换为int,因为在我需要它作为int之前,我将它用作对象。如何将对象有效地转换为int? –