Сборка.GetType выдает значение null, хотя тип находится в сборке

#c# #reflection #types #console

#c# #отражение #типы #консоль

Вопрос:

Следующий код выдает значение null:

 Type type = typeof(Console).Assembly.GetType("Console"); //null
 

Как это возможно? Я ищу консоль типа в сборке, где определена консоль…

Ответ №1:

GetType() ожидает полное имя типа, включая пространство имен.

Если вам нужен этот единственный тип, вы можете получить его также с помощью just typeof(Console) .

Комментарии:

1. Нет ли способа это изменить?

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

3. Например, этот typeof(консоль). Сборка. GetTypes() . Где(t => t.Name == «Консоль»)

Ответ №2:

Я думаю, что Томас очень четко отвечает на ваш вопрос; однако я хотел добавить, что, поскольку вы действительно знаете тип, вы можете сделать что-то подобное следующему:

     Type type = typeof(Console);
    type = type.Assembly.GetType(type.FullName);
 

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