我有一小段代码:
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);
}问题是我得到了空引用异常,我不知道为什么。
发布于 2018-10-24 08:31:44
您可以创建一个Type对象并将其传递给接受Type的overload of CreateInstance,而不是使用以字符串形式接受类型(并返回对象的句柄)的重载
Type t = Type.GetType(myClassName);
return Activator.CreateInstance(t) as I;发布于 2021-08-02 04:54:01
如果您希望x为T,请不要使用x as T。在这种情况下,请始终使用(T) x。这样,您就可以及早发现对象的错误类型,而不是将它们隐藏在NullReferenceExceptions后面。
发布于 2018-10-24 08:16:01
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);
}https://stackoverflow.com/questions/52958967
复制相似问题