如何根据该对象的类型将类中的对象属性设置为另一个类的新实例?

时间:2011-02-28 17:01:57

标签: c# object types

我有以下类(不编译):

public class Field {
    public string fldName { get; set; }
    public object fldValue { get; set; }
    public Field() { }
    public Field(string name, object value) {
        fldName = name;
        Type type = Type.GetType(value);
        fldValue = Activator.CreateInstance(type);
        if (value == null) fldValue = ""; // forces object to be a string
    }
}

我正试图通过传入字符串或我创建的其他类来实现此功能。如果我设置:

fldValue = value;

它只通过引用复制对象,而不是实例化新类。我不确定这里是否需要通用,但我更愿意不这样做。我也不确定如果这个代码确实有效,我是否需要将参数对象深度复制到新的实例对象。

除了字符串之外,我要复制到fldValue的类的属性如下所示:

 public class DateReminder {
            public DateTime reminderDate {get; set;}
            public bool remindDate { get; set; }
            public int warningTime {get; set;}
            public bool remindWarn { get; set; }
    }

对于任何感兴趣的人,通过以下方式解决:

 public class Field {

        public string fldName { get; set; }
        [XmlElement( typeof(string))]
        [XmlElement(typeof(DateReminder))]
        public object fldValue { get; set; }

        public Field() { }

        public Field(Field inField) {
            this.fldName = inField.fldName;
            if (inField.fldValue.GetType() == typeof(DateReminder)) {
                fldValue = (DateReminder)inField.fldValue;
            }
            else fldValue = inField.fldValue;
        }

        public Field(string name, object value) {
            if (value == null) {
                value = "";
            }
            fldName = name;
            fldValue = value;
        }
    }

和DateReminder有自己的复制构造函数。

1 个答案:

答案 0 :(得分:0)

重要的是要理解value变量的值是引用,而不是对象。该值通过语句

直接复制到fldValue
fldValue = value;

所以是的,fldValue将引用所引用的任何对象value

我建议在调用代码中而不是在构造函数中执行副本...否则你不会知道是否需要复制,或者确实如何创建副本。

你最终想要实现什么,以及什么对你不起作用?