为什么if语句中的字符串初始化会阻止我打印?

时间:2009-02-25 10:50:41

标签: c# syntax language-design if-statement

我没有问题,如果

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

但我不能打印出价值,我不知道为什么

7 个答案:

答案 0 :(得分:11)

尝试这样的事情

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

答案 1 :(得分:7)

C#编译器要求在使用前明确初始化变量。

定义初始化是编译时的事情,它不考虑变量的运行时值。

但是,如果变量nom被明确定义为const,则编译器将确保它在运行时不会更改并且if语句块将运行且变量{ {1}}肯定会被分配给。

答案 2 :(得分:6)

这甚至可以编译吗?

nomstring - 你怎么做nom += 1

答案 3 :(得分:5)

尝试用

替换第二行
string ou = null;

问题是如果nom不等于“1”,则变量ou不会被初始化。这里的编译器希望保证为您分配了一个值。

答案 4 :(得分:3)

这是因为在if块的范围之外未分配。将声明行更改为string ou = string.Empty;,并且它可以正常工作。

答案 5 :(得分:3)

此代码段甚至不会编译,更不用说打印ou了。 C#强制所有变量在访问之前进行初始化,在您的情况下并非总是如此。因此改变

string ou;

,说:

string ou = "";

会做得很好。

答案 6 :(得分:1)

另一种选择是在其他地方设置ou:

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