[英]Activator.CreateInstance returns null
我有一小段代码:
public static I CreateInstance<I>(string myClassName) where I : class
{
Debug.Log("Instance: " + (Activator.CreateInstance(null, myClassName) as I));
return Activator.CreateInstance(null, myClassName) as I;
}
void Test(string testName)
{
testName = "TestProvider";
var data = CreateInstance<IProviderInitializer>(testName).GetProviderInfo();
Debug.Log("Data: " + data);
}
问题是我得到了 NULL Reference Exception,我不知道为什么。
您可以创建Type
对象,然后将其传递给接受Type
的CreateInstance
的重载,而不是使用将类型作为字符串的重载(并返回对象的句柄),而不是使用:
Type t = Type.GetType(myClassName);
return Activator.CreateInstance(t) as I;
从文档中
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName);
CreateInstance方法调用返回的“ ObjectHandle”类型不能转换为“ I”,即Activator.CreateInstance(null, myClassName) as I
将始终返回null。
您需要解开物体
public static void Main()
{
ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
Person p = (Person) handle.Unwrap();
p.Name = "Samuel";
Console.WriteLine(p);
}
切勿使用x as T
,当你希望x
是T
。 在这种情况下,始终使用(T) x
代替。 这样你就可以尽早发现对象的错误类型,而不是将它们隐藏在NullReferenceExceptions
后面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.