IDE:VS 2010,c#.net winforms
嗨,我有3个对象obj1 obj2和obj3,obj1启动了一些值,obj2启动了一些值,我想在obj3中作为最终对象,它将包含obj1和obj2的值,见下面的例子:仅当值不为null或0时,才会合并这些值。
AClass obj1 = new AClass();
obj1.value1 = 14;
AClass obj2 = new AClass();
obj2.value2 = 15;
//I want
AClass obj3 = new AClass();
obj3 = obj1 + obj2; // this is not available
//I want to get obj3.value1 = 14 and obj3.value2 = 15 (initiated)
是否有更快或预定义的方法来执行此操作。
答案 0 :(得分:2)
不,没有内置支持合并...除非value1
和value2
的类型为int?
,否则您可能无法告诉"未初始化"之间的差异和"初始化为0"。 (如果他们是属性,您可以为他们提供自定义设置器并记住已经设置了哪些属性。)
我建议你创建自己的静态方法来返回合并的实例,而不是使用+
:
AClass obj3 = AClass.Merge(obj1, obj2);
当然,您需要在该方法中编写逻辑。我们无法在不了解您的要求和类型的情况下轻松提供示例代码。
答案 1 :(得分:1)
您可以在C#中使用称为“运算符重载”的技术,这是一个示例:
class AClass
{
public int value1 { get; set; }
public int value2 { get; set; }
public AClass()
{
}
public AClass(int value1, int value2)
{
this.value1 = value1;
this.value2 = value2;
}
public static AClass operator +(AClass obj1, AClass obj2)
{
return new AClass(obj1.value1, obj2.value2);
}
}
private void Form1_Load(object sender, EventArgs e)
{
AClass obj1 = new AClass();
obj1.value1 = 14;
AClass obj2 = new AClass();
obj2.value2 = 15;
AClass obj3 = new AClass();
obj3 = obj1 + obj2;
label1.Text = obj3.value1.ToString(); // Output 14
label2.Text = obj3.value2.ToString(); // Output 15
}
这是关于运算符重载的reference。
希望这有帮助。
答案 2 :(得分:0)
您可以在c#中执行运算符重载,这是代码
private class AClass
{
public int Value { get; set; }
public static AClass operator +(AClass a, AClass b)
{
return new AClass
{
Value = (a != null ? a.Value : 0) + (b != null ? b.Value : 0)
};
}
}
像这样消费。
AClass a = new AClass() { Value = 5 };
AClass b = new AClass() { Value = 3 };
AClass c = a + b;