.NET 4中的C#代码生成

peo*_*peo 5 c# code-generation

新的(> 2.0).NET框架是否为代码生成提供了任何增强功能?

我在2.0中使用CodeDom,我想知道代码生成是否更简单.

Wis*_*yEh 2

这取决于您想要完成什么。

您提到使用 CodeDom 生成代码 - 如果您希望动态生成方法,那么您可以使用 LINQ 表达式(我想不出一个非常好的教程,但只需 google 一下即可)。

LINQ 表达式的优点是更容易编写(根据我的经验)、生成速度更快(特别是当您编写整个类来封装单个方法时)并且执行速度非常快。

以下是 LINQ 表达式的 VB.Net 片段,该表达式生成一个函数,该函数接受 ASP.Net 控件并返回其(受保护的)ViewState 属性值:

 'generate a delegate that can access the protected control property "ViewState" 
 '(by using LINQ expressions, we can avoid the performance hit of reflection)
  Dim cntrlParam As ParameterExpression = Expression.Parameter(GetType(Control), "cntrl")
  Dim vsPropertyAcessor As MemberExpression = Expression.Property(cntrlParam, "ViewState")
  dim viewStateAccessor as Func(of Control, StateBag) = Expression.Lambda(vsPropertyAcessor, cntrlParam).Compile()
Run Code Online (Sandbox Code Playgroud)

然后我们可以像这样调用生成的函数:

viewStateAccessor (myCntrl)("my_vs_key")
Run Code Online (Sandbox Code Playgroud)

如果您希望生成静态代码,请查看VS 的文本模板功能。