У меня есть универсальный класс в отдельной сборке:
class MyGenericClass<T> { }
В другой сборке я пытаюсь сделать это:
var assembly = System.Reflection.Assembly.LoadFrom(@"C:\path-to\MyClassLibrary.dll");
var t1 = assembly.GetType("MyClassLibrary.MyGenericClass`1");
var t2 = assembly.GetType("MyClassLibrary.MyGenericClass`1[System.String]");
Теперь первый вызов GetType
вернет универсальный тип, а второй вернет ноль.
Я тестировал то же самое с типом List<>
:
var assembly2 = System.Reflection.Assembly.LoadFrom(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll");
var t3 = assembly2.GetType("System.Collections.Generic.List`1[System.String]");
Теперь, на этот раз это работает. Тип List<String>
возвращается. Что оставляет меня в замешательстве.
Почему GetType()
не получит мой тип при вызове с параметром типа [System.String]
, когда он может получить тип List
при вызове с тем же параметром типа?
И есть ли другой способ завладеть моим типом? Я знаю, что могу разобрать имя типа, извлечь части MyClassLibrary.MyGenericClass'1
и [System.String]
, а затем создать экземпляр универсального типа, основанного на этих типах, но я, вероятно, что-то напутал, поэтому я искал более простое, Твердый, встроенный способ получить объект этого типа.