T4编辑生成的代码作为其生成

时间:2016-05-11 12:46:10

标签: c# special-characters code-generation t4

我有一个c#应用程序,它使用T4模板生成嵌入式C代码。 但是我对结果输出有一个小问题,我想知道是否有一个优雅的解决方案。

问题是我循环使用以下T4​​模板for循环和foreach来创建枚举和其他表:

typedef enum eSDef_Index
{
<#    for (int i = 0; i < ScreenDefinitions.Count(); i++)
      { #>
    SD_IDX_<#=ScreenDefinitions[i].Name.ToUpper() #> = <#=i#>,
<#    }
      // >>>> Can we do a backspace here?
#>
}eSDEF_INDEX;

这成功创建了我想要的枚举。但是我使用的C编译器不喜欢上一个枚举条目有逗号。我可以通过检查这是否是列表中的最后一项来解决这个问题,但我不知道是否有更优雅的方式?

我的想法是在使用退格键生成之后有效删除最后一个逗号。

那么可以添加直接影响生成代码的特殊字符吗?或任何其他方式这样做?

1 个答案:

答案 0 :(得分:1)

我认为这是不可能的。

为什么不使用string.Join方法?

typedef enum eSDef_Index
{
    <#= string.Join(",\r\n    ",
            ScreenDefinitions.Select((x, i) =>
                $"SD_IDX_{x.Name.ToUpper()} = {i}")
    ) #>
}eSDEF_INDEX;

将注释放入第一个参数(分隔符):

    <#= string.Join(", // Comment \r\n    ",
            ScreenDefinitions.Select((x, i) =>
                "SD_IDX_" + x.Name.ToUpper() + " = " + i)
    ) #>