首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Activator.CreateInstance返回null

Activator.CreateInstance返回null
EN

Stack Overflow用户
提问于 2018-10-24 07:08:16
回答 3查看 2.6K关注 0票数 0

我有一小段代码:

代码语言:javascript
复制
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);
}

问题是我得到了空引用异常,我不知道为什么。

EN

回答 3

Stack Overflow用户

发布于 2018-10-24 08:31:44

您可以创建一个Type对象并将其传递给接受Typeoverload of CreateInstance,而不是使用以字符串形式接受类型(并返回对象的句柄)的重载

代码语言:javascript
复制
Type t = Type.GetType(myClassName);
return Activator.CreateInstance(t) as I;
票数 2
EN

Stack Overflow用户

发布于 2021-08-02 04:54:01

如果您希望xT,请不要使用x as T。在这种情况下,请始终使用(T) x。这样,您就可以及早发现对象的错误类型,而不是将它们隐藏在NullReferenceExceptions后面。

票数 2
EN

Stack Overflow用户

发布于 2018-10-24 08:16:01

来自the Documentation

代码语言:javascript
复制
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName);

CreateInstance方法调用返回"ObjectHandle“类型,该类型不能转换为"I",Activator.CreateInstance(null, myClassName) as I将始终返回null。

你需要解开你的物体

代码语言:javascript
复制
public static void Main()
   {
      ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
      Person p = (Person) handle.Unwrap();
      p.Name = "Samuel";
      Console.WriteLine(p);
   }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52958967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档