Вы можете использовать метод MakeGenericType
, если у вас есть экземпляр обоих типов, то есть универсальный класс и параметр универсального типа:
// assuming you have a generic class named Class<>
// taking one generic type parameter
Type generic = typeof(MyClassSuffix<>);
Type typeParameter = typeof(MyClass);
Type genericInstance = generic.MakeGenericType(typeParameter);
, а затем:
object o = Activator.CreateInstance(genericInstance);
В вашемЕсли у вас generic
как newType
, и вам необходимо выяснить, какой тип нужно передать в качестве параметра типа, и он должен работать.
Прочитайте следующие Документы MSDN для получения подробной информации.инструкции по этой теме:
https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-examine-and-instantiate-generic-types-with-reflection
UDPATE:
Вы также можете получить параметры универсального типа следующим образом
var newType = assembly.GetTypes().SingleOrDefault(x => x.FullName == argType.FullName + "Suffix");
if(newType.IsGenericType)
{
// Get the generic type parameters or type arguments.
Type[] typeParameters = t.GetGenericArguments();
// Construct the type Dictionary<String, Example>.
Type constructed = newType.MakeGenericType(typeParameters);
}
Еслиу вас есть закрытый тип, тогда вы можете создать его экземпляр так же, как обычный класс.См. Следующий пример:
public class GenericClass<Int>
{
}
Теперь мы можем сгенерировать его экземпляр, например:
Type t = typeof(GenericClass<int>);
object o = Activator.CreateInstance(y);
Console.WriteLine(o);
DEMO Fiddle