1

我花了一些时间尝试使用 Reflection.Emit 动态构建实体图。使用新的平面类型(类)创建程序集,对其进行实例化并将其与反射一起使用很容易并且工作正常。但是,当涉及到使用另一个动态类的通用列表构建结构时,它变得更加复杂,我被卡住了。基本上,我想动态构建以下结构:

public class Head
{
    public string HeadId { get; set; }
    public AssignmentType HeadType { get; set; }
    public int TestIndicator { get; set; }
    public List<Item> Items { get; set; }

    public Head()
    {
        Items = new List<Item>();
    }
}

public class Item
{
    public string ItemId { get; set; }
    public int Weight { get; set; }
    public List<Description> Descriptions { get; set; }

    public Item()
    {
        Descriptions = new List<Description>();
    }
}

public class Description
{
    public string DescriptionText { get; set; }
    public string Country { get; set; }
}

public enum AssignmentType
{
    TypeA,
    TypeB,
    TypeC
}

一直在寻找许多例子,但到目前为止我还没有找到任何解决这个问题的方法。如果有人有样本或可以通过使用 Reflection.Emit 为我指出解决此问题的正确方向,将不胜感激。

4

1 回答 1

1

CSharpCodeProvider最简单的解决方案是使用Microsoft.CSharp命名空间:

    string source = "public class Description" +
                    "{" +
                    "   public string DescriptionText { get; set; }" +
                    "   public string Country { get; set; }" +
                    "}";

    CSharpCodeProvider codeProvider = new CSharpCodeProvider();
    System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
    parameters.GenerateExecutable = false;
    parameters.GenerateInMemory = true;
    CompilerResults result = codeProvider.CompileAssemblyFromSource(parameters, source);
    if (!result.Errors.HasErrors)
    {
        Type type = result.CompiledAssembly.GetType("Description");
        var instance = Activator.CreateInstance(type);
    }
于 2013-11-12T22:38:00.080 回答