如何从具有泛型返回类型的方法返回原语?

本文关键字:方法 返回 原语 返回类型 泛型 | 更新日期: 2023-09-27 18:17:49

在我的代码中,我有一个通用的"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的编译器给我没有错误的第三项,作为道具。position是一个Vector2。道具。可见和道具。然而,启用的是bool类型,所以当我尝试以这种方式返回它们时,我得到了"不能将bool类型转换为T"的错误(第二次是"不能隐式地将bool类型转换为T")。

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

如何从具有泛型返回类型的方法返回原语?

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

如果你想返回引用类型对象实例以及值类型数据(如bool),你将不得不将值类型"框"到对象中,因为引用类型对象是引用类型和值类型之间的唯一共同点。当您将值类型强制转换为Object时,会自动进行装箱。因此,所有的返回值都应该被类型转换为(T)(object)