首页 > 解决方案 > 如何在 T4 CodeGen 中使用类的变量

问题描述

正如在倾斜中提到的,在大量的谷歌搜索之后,我无法弄清楚如何使用类中的变量,让我们说:

public class Candy
{
    public Int Length;  
}

在我的 EnumGen.tt 文件中!

“EnumGen.tt”看起来像:

<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ assembly name="System.dll" #>
<#@ import namespace="System" #>
<#@ parameter name="Length" type="System.Int32" #>
<#@ output extension=".cs" #>


<#    int descrapancy = 20;  #>

namespace Learning2D
{
   public enum CandyDescrapancy
  {
    <#for(int i = 0; i < Length; i++)  //Length shall be the class variable from the CandyClass
    { 
    #>   
     index_<#=i.ToString()#> = <#=descrapancy#>, 
    <#descrapancy+=20;#>
   <#}#> 
 }

}

注意:两个文件都在同一个命名空间中!

如果你能在这方面启发我,我会很高兴^^

此致

搁置

标签: c#

解决方案


不幸的是,你不能这样做。

请记住,T4 模板在编译时运行。他们无法引用您的变量的值,因为实际上还没有运行该代码。此时您的Candy类甚至还没有编译,更不用说在其Length字段中设置实际值的任何内容了。

T4 模板的目标是生成代码,然后与您的Candy类一起编译,而不是使用同一程序集中的代码在运行时执行操作。


推荐阅读