Имя пространства имен является частью полного имени типа. Например, полное имя List<T>
равно System.Collections.Generic.List<T>
Использование полных имен везде было бы неудобно, поэтому C # позволяет пропускать пространство имен части, добавляя директиву using
в верхней части исходного кода. Однако это только хитрость компилятора, которая добавляет пространство имен в список мест для поиска разрешения типа.
Вы можете использовать LINQ для поиска класса по его имени (в отличие от его полного имени) следующим образом:
var myType = assembly.GetTypes().SingleOrDefault(t => t.Name == "Bonobo");
Примечание: Ваш подход более строг в том смысле, что изменение пространства имен приведет к ошибке. Приведенный выше подход, с другой стороны, менее предсказуем, поскольку вы можете или не хотите выбирать класс из другого пространства имен. Кроме того, произойдет сбой, если в одной сборке будет несколько классов с одинаковым коротким именем и разными пространствами имен.