2016-03-02 2 views
1

Я пытаюсь получить оператор If else, чтобы вычислить значение, основанное на объекте, переданном из цикла. Этот шаблон работал до тех пор, пока я не добавлю в блок if else, и он говорит, что он не может использоваться как оператор. Мысли ??Шаблон T4 Если заявление 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; }; 
<# 
    } 
#> 
    } 
} 

Условный еще проверяет, если столбец является обнуляемым поле и если да, то сделать это тип данных также обнуляемым в C#.

ответ

2

Выражения в if-х Then/Else части не будет генерировать код. Вы должны написать это:

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

Или использовать условный оператор ?: в течение более короткого варианта является:

<#= (c.IsNullable && c.DataType != "string" && c.DataType != "string []") ? (c.DataType + "?") : c.DataType #> 
+0

Интересный я не мог получить: оператор компиляции, но, вероятно, только я кодирования это неправильно ... просто обучение Т4. Я попробую этот метод также просто проверить его :) – user1732364

+1

он работает! Я буду отмечать это как ответ, как решение и синтаксис больше, чем мое собственное открытие. – user1732364

0

Я смог решить это сам, просто наткнулся на статью, которая дала мне идею попробовать метод .Write и бам, который работает! На всякий случай другие сталкиваются с подобной проблемой.

public <# if (c.IsNullable && c.DataType != "string" && c.DataType != "string []") { this.Write(c.DataType + "?"); } else { this.Write(c.DataType); } #> <#= c.ColumnName #> { get; set; }; 
Смежные вопросы