如何在运行时实例化此"具有泛型参数的类"

som*_*ley 3 c#

考虑以下代码行:

classA<classB> C;
Run Code Online (Sandbox Code Playgroud)

我想通过使用System.Reflection在运行时创建C的实例.为此,我需要在运行时知道classA和classB的类型.

我知道如何获得classB的类型

Type classBType = AssemblyContaingClassB.GetType("namespace.classB");
Run Code Online (Sandbox Code Playgroud)

Q1>如何使用此classBType获取classA的类型?

Q2>我明白要在运行时创建实例,我们调用以下代码行:

object C = Activator.CreateInstance(TypeName);
Run Code Online (Sandbox Code Playgroud)

要创建C的实例,代码上面应使用什么TypeName?将足以创建此实例的classA类型

如果这个问题太基础,请提前致谢并道歉.我是c#的新手.

编辑:

问题是固定的.从pswg的答案来看,使用泛型参数获取类的类型存在问题.可以在此处找到有关如何获取通用参数类型的解决方案.之后我就做了pswg的回答建议及其工作.

Dar*_*rov 8

您可以MakeGenericType在open-generic classA<>类型上使用该方法:

Type classBType = ... get from somewhere at runtime
Type classAType = typeof(classA<>).MakeGenericType(classBType);
object classAInstance = Activator.CreateInstance(classAType);
Run Code Online (Sandbox Code Playgroud)

MakeGenericType将关闭classA<>通用,并有可能实例.