Создать экземпляр класса из строки - PullRequest
4 голосов
/ 20 февраля 2010

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

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

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

Значение не может быть нулевым

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

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

Ответы [ 7 ]

5 голосов
/ 20 февраля 2010

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

eg AssemblyName.Namespace.ClassName

Документ MSDN о полных именах сборки

3 голосов
/ 20 февраля 2010

Возможно, вам просто не хватает пространства имен из класса

1 голос
/ 20 февраля 2010

у меня работает:

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 голосов
/ 20 февраля 2010

Похоже, Type.GetType("classPrefix_" + className) возвращает ноль.

Возвращает ноль, когда не может найти тип. У пары возможных причин отсутствует пространство имен или сборка, в которой находится класс, еще не загружена.

Документация Api о методе, которая может дать больше информации. http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

0 голосов
/ 20 февраля 2010

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

0 голосов
/ 20 февраля 2010

У вас, вероятно, нет типа "classPrefix_" плюс то, что у вас есть в className. Вызов Type.GetType () возвращает значение NULL, а CreateInstance создает исключение ArgumentNullException.

0 голосов
/ 20 февраля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...