如何将CodeDOM对象强制转换为正确的类型

时间:2013-05-09 22:15:04

标签: c# codedom

我有一些代码可以生成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();

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

您无法转换为动态创建的类型。

我在这里看到两个选项:

  1. 使您生成的类型实现一个非生成的接口并转换为:

    var runtimeObj = (ICanDoStuff)Activate.CreateInstance(…);
    runtimeObj.DoStuff();
    
  2. 使用dynamic或反射来调用方法:

    dynamic runtimeObj = Activate.CreateInstance(…);
    runtimeObj.DoStuff();