我有一些代码可以生成CodeCompileUnit元组的数组和不同类的CodeTypeDeclarations。 生成数组后,我希望能够调用并创建数组的给定成员的实例。但是,似乎无法弄清楚如何获取CodeTypeDeclaration中定义的类的名称和类型。
var tuple = Factory.CreateTuple(...);
var provider = new CSharpCodeProvider();
var parameters = new CompilerParameters
{
GenerateInMemory = true,
IncludeDebugInformation = true
};
var results = provider.CompileAssemblyFromDom(parameters, tuple.GetCodeCompileUnit());
var runtimeObj = (????tuple.GetCodeTypeDeclaration().GetType()???)Activate.CreateInstance(results.CompileAssembly.GetType(tuple.GetCodeTypeDeclaration().Name));
runtimeObj.DoStuff();
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
您无法转换为动态创建的类型。
我在这里看到两个选项:
使您生成的类型实现一个非生成的接口并转换为:
var runtimeObj = (ICanDoStuff)Activate.CreateInstance(…);
runtimeObj.DoStuff();
使用dynamic
或反射来调用方法:
dynamic runtimeObj = Activate.CreateInstance(…);
runtimeObj.DoStuff();