У меня есть следующий класс (не компилируется):
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 имеет свой собственный конструктор копирования.