Почему эта инициализация строки в операторе if мешает мне печатать? - PullRequest
2 голосов
/ 25 февраля 2009

У меня есть небольшая проблема, если

{
    string nom;
    string ou;
    nom = "1";
    if (nom == "1")
    {
        nom +=1;
        ou = nom;
    }
    Console.Write(ou);
}

но я не могу вывести значение, я не знаю, почему

Ответы [ 7 ]

11 голосов
/ 25 февраля 2009

Попробуйте что-то вроде этого

{
    string nom;
    string ou = String.Empty;
    nom = "1";
    if (nom == "1")
    {
        nom +=1;
        ou = nom;
    }
    Console.Write(ou);
}
7 голосов
/ 25 февраля 2009

Компилятор C # требует, чтобы переменные были определенно инициализированы перед использованием.

Определенная инициализация выполняется во время компиляции, она не учитывает значения переменных во время выполнения.

Однако, если переменная nom была явно определена как const, компилятор был бы уверен, что она не изменится во время выполнения, и блок оператора if запустится, и переменная ou будет определенно назначена к.

6 голосов
/ 25 февраля 2009

Это даже компилируется?

nom это string - как вы можете nom += 1?

5 голосов
/ 25 февраля 2009

Попробуйте заменить вторую строку на

string ou = null;

Проблема в том, что если nom окажется не равным «1», переменная ou не будет инициализирована. Компилятор здесь хочет гарантировать, что вам присвоено значение.

3 голосов
/ 25 февраля 2009

Этот фрагмент даже не скомпилируется, не говоря уже о печати ou. C # принудительно инициализирует все переменные перед обращением, что не всегда верно в вашем случае. Таким образом меняется

string ou;

сказать:

string ou = "";

отлично подойдет.

3 голосов
/ 25 февраля 2009

Это потому, что ou не назначен вне области действия блока if. Измените строку объявления на string ou = string.Empty;, и она будет работать.

1 голос
/ 25 февраля 2009

Другой вариант - установить ou в else:

if (nom == "1")
{
    nom +=1;
    ou = nom;
} else 
{
    ou = "blank value";
}
...