如何在C#中生成新类型

skb*_*skb 0 c# il

我真的想在运行时生成一个新类型.基本上,我想创建看起来像这样的类型:

public class MySpecial123
{
    public Func<int, DateTime, int> salesVectorCalc; // field

    public int CallSalesVectorCalculation(int i, DateTime d)
    (
        return salesVectorCalc(i, d);
    )
}
Run Code Online (Sandbox Code Playgroud)

一些类型将根据用户/数据库输入而有所不同,因此我无法以任何其他方式完成它,然后在运行时创建类型.还有更复杂的问题,但我想让我的问题变得简单,所以我只是在这里提出基本问题.我需要做更多代,就像你在这里看到的那样.

我认为使用它会很酷Reflection.Emit,但后来我意识到生成代码并在内存中编译所有内容可能更容易.有谁知道哪个更好?我真的想看一个如何做其中任何一个的例子.

Mat*_*ell 5

当你说"在运行时生成一个类型"时,听起来好像你要求动态类型.

在C#4.0中,只需使用dynamic关键字即可完成.

但是,您还描述了类似于代码生成的东西 - 如果这更像您所追求的,为什么不使用类似T4模板的东西在"预编译"阶段生成您的类型?

  • 为T4模板+1,并保持简单 (2认同)