如何从具有泛型返回类型的方法返回基元?
问题描述:
在我的代码我有一个通用的“的getProperty”像这样:如何从具有泛型返回类型的方法返回基元?
public T getProperty<T>(int GUID, string property)
{
PropertyComponent prop;
prop = propDict[GUID];
if(property.Equals("visible")) return (T) (Boolean) prop.visible;
if(property.Equals("enabled")) return prop.enabled;
if(property.Equals("position")) return (T) (Object) prop.position;
}
Visual Studio的编译器给我的第三学期没有错误,因为prop.position是一个Vector2。然而,Prop.visible和prop.enabled是bool s,所以当我尝试以这种方式返回它们时,出现“无法将类型bool转换为T”(以及“无法将类型bool转换为T”的错误第二)。
在这种情况下返回bool的正确方法是什么?
答
您可以将泛型类型参数约束为类或结构(使用where子句),但在您的示例中,您将T类型视为类和结构(bool值类型)。
如果您想要返回引用类型对象实例以及值类型数据(如bool),您将必须将值类型“框”到对象中,因为引用类型对象是唯一的公分母参考类型和值类型之间。当您将一个值类型转换为Object时,会自动进行装箱。所以,你所有的返回值都应该被改为(T)(object)
。
`(T)(object)`是所有3个术语的正确组合。 – Marc 2011-12-15 02:15:50
@Marc所以答案是,“你不能使用原语”? – 2011-12-15 03:08:54