Activator.CreateInstance возвращает ноль - PullRequest
0 голосов
/ 24 октября 2018

У меня есть небольшой фрагмент кода:

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, и я понятия не имею, почему.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вместо использования перегрузки, которая принимает тип в виде строки (и возвращает дескриптор объекта), вы можете создать Type объект и передать , который , в перегрузку CreateInstance, который принимает Type:

Type t = Type.GetType(myClassName);
return Activator.CreateInstance(t) as I;
0 голосов
/ 24 октября 2018

С Документация

public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName);

Вызов метода CreateInstance возвращает тип "ObjectHandle", который не может быть преобразован в "I", Activator.CreateInstance(null, myClassName) as I всегда будет возвращать ноль.

Вам нужно развернуть объект

public static void Main()
   {
      ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
      Person p = (Person) handle.Unwrap();
      p.Name = "Samuel";
      Console.WriteLine(p);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...