为什么这种通用类型实例化的情况不起作用?

时间:2015-01-12 18:33:45

标签: c# generics unity3d

我写了这个简化的代码来解释我面临的问题。我的问题在底部。

public abstract class Creator<T> : UnityEngine.Object
 where T :UnityEngine.Object, new()
{
    public static T CreateInstance()
    {
        T instance = new T(); // -> Here's the issue! always null

        return instance;
    }
}

public class ConcreteCreator : Creator<ConcreteCreator>
{
}

每当我调用CreateInstance时,结果始终为null。这是因为泛型类型T的实例化始终返回null:

T instance = new T(); // - &gt;这是问题,每次都返回null

我试过不同的子类。我也尝试使用Activator.CreateInstance()而不是新的T()。但是在从通用类型T 中删除UnityEngine.Object类约束之前没有任何效果。像这样:

public abstract class Creator<T> : UnityEngine.Object where T : new()

{...}

就在那时,一切都按预期工作。

所以,我的问题是:

当类型被约束为UnityEngine.Object的子类时,为什么泛型类型(使用无参数构造函数)的实例化返回null?

1 个答案:

答案 0 :(得分:0)

显然UnityEngine.Object覆盖 ==运算符并假装为null,即使它不是。见New UnityEngine.Object is Null 更多细节。 无论如何,它与泛型或c#无关。