【发布时间】:2011-02-21 18:22:42
【问题描述】:
我正在阅读making a generic property 上的一个问题,但我对first answer 的最后一个示例感到有些困惑(我在下面包含了相关代码):
你必须在编译时知道类型 时间。如果你不知道类型 编译时间那么你必须存储 它在一个对象中,在这种情况下你可以 将以下属性添加到 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 包含不同类型的值,并且我想将各种Foos 放入一个集合中。换句话说,我想要一个包含不同类型对象的集合。
【问题讨论】:
标签: c# generics casting properties