0

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

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

4

1 回答 1

2

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

我在这里看到两个选项:

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

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

    dynamic runtimeObj = Activate.CreateInstance(…);
    runtimeObj.DoStuff();
    
于 2013-05-09T23:09:18.543 回答