如何从具有generics返回类型的方法返回基元?

在我的代码中,我有一个通用的“getProperty”,如下所示:

public T getProperty(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”第二)。

在这种情况下返回布尔的正确方法是什么?

您可以将generics类型参数约束为类或结构(使用where子句),但在您的示例中,您将T类型视为类和结构(bool值类型)。

如果要返回引用类型对象实例以及值类型数据(如bool),则必须将值类型“装箱”到对象中,因为引用类型对象是引用类型和引用类型之间唯一的共同点。价值类型。 将值类型转换为Object时,会自动进行装箱。 因此,所有返回值都应该是(T)(object)类型转换。