是否有任何自动方式来同步对象的值

时间:2014-11-27 06:53:37

标签: c# winforms

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)

是否有更快或预定义的方法来执行此操作。

3 个答案:

答案 0 :(得分:2)

不,没有内置支持合并...除非value1value2的类型为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;