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

Why this case of generic type instantiation doesn't work?

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

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 时,结果始终为空。这是因为泛型类型 T 的实例化总是返回 null:

T 实例 = 新 T(); //->问题来了,这个returns每次都是null

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

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

{...}

就在这时,一切如期进行。

那么,我的问题是:

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

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