簡體   English   中英

Activator.CreateInstance 返回 null

[英]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 ,當你希望xT 在這種情況下,始終使用(T) x代替。 這樣你就可以盡早發現對象的錯誤類型,而不是將它們隱藏在NullReferenceExceptions后面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM