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

C# 为什么if语句中的字符串初始化会阻止我打印?,c#,syntax,language-design,if-statement,C#,Syntax,Language Design,If Statement,我对if没有什么问题 { string nom; string ou; nom = "1"; if (nom == "1") { nom +=1; ou = nom; } Console.Write(ou); } 但是我不能打印ou值,我不知道为什么编译器要求在使用前对变量进行明确的初始化 确定初始化是编译时的事情,它不考虑变量的运行时间值。< /P> 但是,如果变量nom被显式定义为const,编译器将确

我对if没有什么问题

{
    string nom;
    string ou;
    nom = "1";
    if (nom == "1")
    {
        nom +=1;
        ou = nom;
    }
    Console.Write(ou);
}
但是我不能打印ou值,我不知道为什么编译器要求在使用前对变量进行明确的初始化

确定初始化是编译时的事情,它不考虑变量的运行时间值。< /P>


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

尝试类似的操作

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

这是因为ou在if块的范围之外未分配。将声明行更改为
string ou=string.Empty应该可以使用。

这段代码甚至无法编译,更不用说打印
ou
。C#强制所有变量在访问之前进行初始化,这在您的情况下并不总是正确的。从而改变

string ou;
比如说:

string ou = "";

很好。

试着将第二行替换为

string ou = null;

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

这是编译吗


nom
是一个
字符串
-如何执行
nom+=1

另一个选项是在else中设置ou:

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

同样的方式字符串foo=“User id=”+10;作品结果是“用户id=10”。在这里,nom应该是“11”。不可否认,这可能不是预期的结果……1将在连接之前转换为字符串。它等于nom+=1.ToString(),对于否决此项的人:你到底不同意什么?我没有否决它,但我的问题是=”,它应该是=字符串。出于可读性的原因,大部分为空。在我看来,这不是一个明确的问题。代码很奇怪,没有任何解释——为什么字符串上的“x+=1”?