C# T4模板If Else语句是否写出对象而不是文本?
我试图获取If-else语句,以根据从循环传入的对象计算值。这个模板一直有效,直到我在if-else块中添加了它,它说它不能用作语句。想法C# T4模板If Else语句是否写出对象而不是文本?,c#,t4,C#,T4,我试图获取If-else语句,以根据从循环传入的对象计算值。这个模板一直有效,直到我在if-else块中添加了它,它说它不能用作语句。想法 <#@ template language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import n
<#@ 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; };
<#
}
#>
}
}
名称空间
{
公共课
{
公共{get;set;};
}
}
if-else正在检查列是否为可空字段,如果是,则在C#中使其数据类型也为可空。我自己能够解决这个问题,刚刚看到一篇文章,让我想到尝试.Write方法,然后bam它可以工作!!以防其他人遇到类似的问题
public <# if (c.IsNullable && c.DataType != "string" && c.DataType != "string []") { this.Write(c.DataType + "?"); } else { this.Write(c.DataType); } #> <#= c.ColumnName #> { get; set; };
public{get;set;};
如果的then/else部分中的表达式不会生成代码。你应该这样写:
public <# if (c.IsNullable && c.DataType != "string" && c.DataType != "string []") { #>
<#= c.DataType + "?" #>
<# } else { #>
<#= c.DataType #>
<# } #> <#= c.ColumnName #> { get; set; };
有趣的是,我无法编译?:运算符,但可能只是我编错了。只是学习T4。我也会尝试这个方法来验证:)它很有效!我将把它标记为答案,更像是解决方案和语法,而不是我自己的发现。
<#= (c.IsNullable && c.DataType != "string" && c.DataType != "string []") ? (c.DataType + "?") : c.DataType #>