T4模板如果Else语句写出对象而不是文本?

use*_*364 3 c# t4

我试图获取If else语句来计算基于从循环传入的对象的值.这个模板一直有效,直到我添加到if else块中,它说它不能用作语句.思考?

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="CookieCutterDT" #>
<#@ import namespace="CookieCutterBL.DT_Template" #>

namespace <#= NameSpace #>
{
    public class <#= ClassName #>
    {
<#
        foreach(ColumnDT c in Columns)
    {#>
        public <# if (c.IsNullable && c.DataType != "string" && c.DataType != "string []") { c.DataType + "?"; } else { c.DataType; } #> <#= c.ColumnName #> { get; set; };
<#
    }
#>
    }
}
Run Code Online (Sandbox Code Playgroud)

if else是检查列是否为可空字段,如果是,则使其数据类型在C#中也可以为空.

Ond*_*cny 11

if's then/else部分中的表达式不会生成代码.你应该这样写:

public <# if (c.IsNullable && c.DataType != "string" && c.DataType != "string []") { #>
    <#= c.DataType + "?" #>
<# } else { #> 
    <#= c.DataType #>
<# } #> <#= c.ColumnName #> { get; set; };
Run Code Online (Sandbox Code Playgroud)

或者,使用条件运算符?:作为更短的替代方法是:

<#= (c.IsNullable && c.DataType != "string" && c.DataType != "string []") ? (c.DataType + "?") : c.DataType #>
Run Code Online (Sandbox Code Playgroud)