Я читал вопрос о создании общего свойства , но меня немного смущает последний пример первого ответа (я включил соответствующий код ниже ):
Вы должны знать тип при компиляции
время. Если вы не знаете тип в
время компиляции, то вы должны хранить
это в объекте, в этом случае вы можете
добавить следующее свойство в Foo
Класс:
public object ConvertedValue {
get {
return Convert.ChangeType(Value, Type);
}
}
Это кажется странным: оно преобразует значение в указанный тип, но возвращает его как объект, когда значение было сохранено как объект. Разве возвращенный объект еще не требует распаковки? Если это так, то зачем беспокоиться о преобразовании типа?
Я также пытаюсь создать универсальное свойство, тип которого будет определен во время выполнения:
public class Foo
{
object Value {get;set;}
Type ValType{get;set;}
Foo(object value, Type type)
{ Value = value; ValType = type; }
// I need a property that is actually
// returned as the specified value type...
public object ConvertedValue {
get {
return Convert.ChangeType(Value, ValType);
}
}
}
Можно ли сделать общее свойство? Требуется ли для возвращаемого свойства все еще распаковка после получения доступа?
Примечание: я не хочу делать Foo
универсальным, потому что я хочу, чтобы Foo
содержал значения разных типов, и я хочу поместить различные Foo
в коллекцию. Другими словами, я хочу иметь коллекцию, которая содержит различные типы объектов.