2010-02-19 4 views
4

У меня есть метод C#, который создает новый экземпляр класса из строки, однако я получаю сообщение об ошибке при запуске кода.Создать экземпляр класса из строки

obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className)); 

ArgumentNullException был необработанное

Значение не может быть пустым

Имя параметра: Тип

Любая помощь на этой ошибке будут оценены.

+0

Ну ... Класс "classPrefix _ ????" существовать? Если это не так, Type.GetType вернет null ... –

ответ

5

Вы, возможно, потребуется использовать имя сборки в качестве аргумента Type.GetType

eg AssemblyName.Namespace.ClassName 

+1

+1: Это хорошее предположение о том, что может быть проблемой. –

+0

FQTN - пространство имен.Класс, сборка, то есть имя сборки идет в конце и разделяется запятой (а не спереди и разделяется точкой). – itowlson

+0

Спасибо. Я не должен был поставить 'Namespace.className' –

0

Похоже, что ваш звонок Type.GetType("classPrefix_" + className) возвращает null. Это вызывает ArgumentNullException при передаче методу CreateInstance.

Оцените "classPrefix_" + className и убедитесь, что у вас есть тип, называемый тем, что он оценивает.

Вы также должны указать AssemblyQualifiedName при использовании метода Type.GetType (то есть полное имя типа, включая имя сборки и пространство имен).

3

Вы можете просто отсутствовать пространство имен с именем класса

0

Вы, вероятно, не имеют тип «classPrefix_» плюс все, что у вас есть на Classname. Вызов Type.GetType() возвращает значение null, а CreateInstance выбрасывает ArgumentNullException.

0

Это потому, что Type.GetType(classHere) ничего не нашел, вы уверены, что имя класса, в котором вы находитесь, существует? Помните, что это должно быть префиксное пространство имен, если это возможно, и не будет найдено во внешней сборке, если оно уже не загружено в домене приложения.

1

работает для меня:

class ClassX {} 
class classPrefix_x : ClassX {} 

public class Program 
{ 
    public static void Main() 
    { 
     string className = "x"; 
     ClassX obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className)); 
     Console.WriteLine(obj); 
    } 
} 

Результат:

classPrefix_x 

Класс вы ищете не должны быть определены. Вы уверены, что набрали его правильно?

0

Это выглядит как Type.GetType("classPrefix_" + className) возвращается нуль.

Это возвращает значение null, когда оно не может найти тип. Пара возможных причин - отсутствие пространства имен или сборка, в которой находится класс, еще не загружена.

Документация Api по методу, который может дать еще немного. http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

Смежные вопросы