【发布时间】:2015-04-07 03:29:05
【问题描述】:
我正在尝试创建一个泛型类型的实例。我已经尝试通过反射获取构造函数,现在您将在下面看到这种方式,并且两次生成的对象都是空的。
Type type = typeof(StatDefinition<>).MakeGenericType(statTypes[selectedType]);
object definitionObject = Activator.CreateInstance(type, newName, newDescription);
StatTopic.WriteLine(definitionObject);
为了帮助理解变量,statTypes[selectedType] 只是一个基本类型(bool、int、float 等)。对于我的测试,它一直是 typeof(float)。 'newName' 和 'newDescription' 都是字符串。
StatDefinition 的构造函数是:
public StatDefinition(string name, string description) : base(name, description)
{
StatTopic.WriteLine(typeof(T));
}
我的控制台首先输出“System.Single”(来自 StatDefinition 的构造函数),然后是“null”(definitionObject 为 null)。
我似乎找不到原因,显然构造函数被调用没有问题,但新对象没有被返回。
编辑:stat 定义类扩展了 Unity3D 的“ScriptableObject”类,这似乎是问题所在。仍然不确定如何解决这个问题
【问题讨论】:
-
你可以试试
Activator.CreateInstance(type, new object [] { newName, newDescription }); -
谢谢,但我也有同样的问题。还有其他想法吗?
-
那么,如果你在
StatTopic.WriteLine(definitionObject);行上放一个断点,是否表明definitionObject为空? -
我确定您没有在此处发布的代码有问题。尝试在此处指定与此问题相关的整段代码 这个小提琴对我来说很好dotnetfiddle.net/hejCNM
-
原来扩展 'ScriptableObject' 类(来自 Unity3D)是导致问题的原因。不完全确定为什么,也不知道是否值得保留这个问题,因为现在的情况似乎大不相同。
标签: c# reflection activator