Ошибка C#: использование неназначенной локальной переменной (контекстно-визуальная студия T4 ENGINE)

В C# (в контексте шаблона T4 см. http://www.olegsych.com/2008/03/how-to-generate-multiple-outputs-from-single-t4-template/) я хочу сделать это

<# String myTemplateVar; 
#>

<# if (string.IsNullOrEmpty(myTemplateVar)) { 
    myTemplateVar= "name";
}; 
#>

Я хочу дать значение myTemplateVar, если myTemplateVar еще не был настроен внешним вызовом из механизма T4 в другом шаблоне, который будет иметь эту инструкцию:

CallContext.SetData("myTemplate.myTemplateVar", ExternalTemplateVar);

Но я не могу даже скомпилировать в C#, почему? Как это исправить?

Подобные вещи легко сделать в PHP. Я не понимаю, почему в C# это кажется таким сложным.

Обновление: проблема в том, что, если я инициализируюсь в Null или Empty, чтобы избежать ошибки компиляции, как я могу определить, что переменная была установлена ​​внешним вызовом?

3 ответа

Решение

Переменная myTemplateVar, как определено выше, находится в области видимости метода внутри класса, лежащего в основе шаблона (внутри метода TransformText). Если вы хотите использовать уровень класса, вы можете использовать функциональный блок класса, например, так.

<#+ public string myTemplateVar; #>

или даже класс static:

<#+ public static string myTemplateVar; #>

Однако до сих пор нет способа узнать, была ли переменная установлена, кроме как по ее нулевому значению или нет, хотя для ссылочного типа в C#.

Пытаться:

<# String myTemplateVar = String.Empty;  #> 

для того, чтобы решить ошибку компиляции.

Вы пытались дать вашей строке значение по умолчанию? Если он не попадет в блок if, он останется неназначенным.

Другие вопросы по тегам