Почему мы не можем определить переменную внутри оператора if?

Возможно, на этот вопрос уже был дан ответ, но слово , если встречается так часто, что его трудно найти.

Пример не имеет смысла (выражение всегда верно) , но это иллюстрирует мой вопрос.

Почему этот код действителен:

StringBuilder sb;
if ((sb = new StringBuilder("test")) != null) {
    Console.WriteLine(sb);
}

Но этот код неверен:

if ((StringBuilder sb = new StringBuilder("test")) != null) {
    Console.WriteLine(sb);
}

Я нашел аналогичный вопрос относительно оператора while . В принятом ответе говорится, что в операторе while это будет означать, что переменная будет определяться в каждом цикле. Но в моем примере оператора if это не так.

Так по какой причине нам не разрешено это делать?

47
задан comecme 2 July 2011 в 19:52
поделиться

1 ответ

Это из-за типа переменной инициализации. Для инициализации в условии, это должно быть следующие:

if (new StringBuilder("test") is StringBuilder ResultVar && ResultVar != null) {
    // Do something with ResultVar
    ResultVar.Append("OK");
}
// Not accesible because the var never initialized
ResultVar.Append("Error");
-1
ответ дан 23 September 2019 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: