我写了这个简化的代码来解释我面临的问题。我的问题在底部。
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?
答案 0 :(得分:0)
显然UnityEngine.Object
覆盖
==
运算符并假装为null,即使它不是。见New UnityEngine.Object is Null
更多细节。
无论如何,它与泛型或c#无关。