在我的代码中,我有一个通用的“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的编译器在第3个术语中没有给出任何错误,因为prop.position是Vector2。然而,Prop.visible和prop.enabled是bool s,所以当我尝试以这种方式返回它时,我得到一个错误“无法将类型bool转换为T”(并且“无法将类型bool隐式转换为T”第二)。
在这种情况下返回布尔的正确方法是什么?
答案 0 :(得分:3)
您可以将泛型类型参数约束为类或结构(使用where子句),但在您的示例中,您将T类型视为类和结构(bool值类型)。
如果要返回引用类型对象实例以及值类型数据(如bool),则必须将值类型“装箱”到对象中,因为引用类型对象是它们之间唯一的共同点。引用类型和值类型。将值类型转换为Object时,会自动进行装箱。因此,您的所有返回值都应该强制转换为(T)(object)
。