Ошибка c #: использование неназначенной локальной переменной (контекстно-визуальная студия T4 ENGINE) - PullRequest
2 голосов
/ 09 января 2011

В 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 ]

3 голосов
/ 10 января 2011

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

<#+ public string myTemplateVar; #>

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

<#+ public static string myTemplateVar; #>

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

2 голосов
/ 09 января 2011

Попробуйте:

<# String myTemplateVar = String.Empty;  #> 

для устранения ошибки компиляции.

1 голос
/ 09 января 2011

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

...