Ошибка 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, он останется неназначенным.