2

如果我有一点问题

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

但我不能打印你的价值我不知道为什么

4

7 回答 7

11

尝试这样的事情

{
    string nom;
    string ou = String.Empty;
    nom = "1";
    if (nom == "1")
    {
        nom +=1;
        ou = nom;
    }
    Console.Write(ou);
}
于 2009-02-25T10:53:21.147 回答
7

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

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

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

于 2009-02-25T10:52:23.350 回答
6

这甚至可以编译吗?

nomstring——你怎么办nom += 1

于 2009-02-25T10:56:23.090 回答
5

尝试将第二行替换为

string ou = null;

问题是如果 nom 结果不等于“1”,变量 ou 将不会被初始化。这里的编译器想要保证 ou 已经被赋值。

于 2009-02-25T10:54:26.480 回答
3

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

于 2009-02-25T10:53:31.600 回答
3

这个片段甚至不会编译,更不用说打印了ou。C# 强制在访问之前初始化所有变量,这在您的情况下并不总是如此。从而改变

string ou;

说:

string ou = "";

会做得很好。

于 2009-02-25T10:53:51.207 回答
1

另一种选择是在 else 中设置 ou:

if (nom == "1")
{
    nom +=1;
    ou = nom;
} else 
{
    ou = "blank value";
}
于 2009-02-25T11:24:31.057 回答