类型' T'不能用作类型参数' T'在泛型类型或方法中

时间:2016-03-21 17:13:03

标签: c# unity3d

我有以下方法:

protected T AttachComponent<T>(){
    T gsComponent = gameObject.GetComponent<T>();
    if(gsComponent == null){
        gsComponent = gameObject.AddComponent<T>();
    }
    return gsComponent;
}

AddComponent行,我收到以下错误:

  

类型&#39; T&#39;不能用作类型参数&#39; T&#39;在泛型类型或方法&#39; GameObject.AddComponent()&#39;中。       没有拳击转换或类型参数转换来自&#39; T&#39;到UnityEngine.Component&#39;。

我不知道我能做些什么来解决这个错误,为什么我不能这样做?

1 个答案:

答案 0 :(得分:13)

问题是AddObject方法返回Component。您需要告诉编译器您的T实际上是一种Component。

将通用约束附加到您的方法,以确保您的TComponent s

protected void AttachComponent<T>() where T : Component
{
    // Your code.
}