提问人:madman 提问时间:2/25/2009 最后编辑:Jamesmadman 更新时间:8/11/2011 访问量:454
为什么 if 语句中的此字符串初始化会阻止我打印?
Why does this string initialization in an if statement prevent me from printing?
问:
我没什么问题
{
string nom;
string ou;
nom = "1";
if (nom == "1")
{
nom +=1;
ou = nom;
}
Console.Write(ou);
}
但是我无法打印 ou 值,我不知道为什么
答:
7赞
Mehrdad Afshari
2/25/2009
#1
C# 编译器要求在使用前明确初始化变量。
确定初始化是编译时的事情,它不考虑变量的运行时值。
但是,如果将变量显式定义为 ,编译器将确保它在运行时不会更改,并且语句块将运行,并且该变量肯定会被分配给。nom
const
if
ou
11赞
Jedi Master Spooky
2/25/2009
#2
试试这样的东西
{
string nom;
string ou = String.Empty;
nom = "1";
if (nom == "1")
{
nom +=1;
ou = nom;
}
Console.Write(ou);
}
3赞
Adam Ralph
2/25/2009
#3
这是因为 ou 未赋值在 if 块的作用域之外。将声明行更改为 and it should work。string ou = string.Empty;
3赞
Anton Gogolev
2/25/2009
#4
这个片段甚至不会编译,更不用说打印了。C# 强制所有变量在访问之前进行初始化,这在您的情况下并不总是正确的。因此改变ou
string ou;
说:
string ou = "";
会做得很好。
评论
0赞
Anton Gogolev
2/25/2009
对那些投反对票的人:你到底不同意什么?
0赞
Alex
5/5/2009
我没有对它投反对票,但我的问题是 =“”,出于可读性原因,它应该是 = String.Empty。
5赞
Martijn
2/25/2009
#5
尝试将第二行替换为
string ou = null;
问题是,如果 nom 不等于 “1”,变量 ou 就不会被初始化。这里的编译器希望保证 ou 已被分配一个值。
6赞
teedyay
2/25/2009
#6
这甚至会编译吗?
nom
是一个 - 你怎么能做?string
nom += 1
评论
4赞
Jon Skeet
2/25/2009
同理 string foo = “User id=” + 10;工程。结果是“User id=10”。在这里,nom 将是“11”。诚然,这可能不是预期的结果......
0赞
abatishchev
2/25/2009
1 将在串联之前转换为字符串。它等于 nom += 1.ToString()
1赞
GeekyMonkey
2/25/2009
#7
另一种选择是在 else 中设置 ou:
if (nom == "1")
{
nom +=1;
ou = nom;
} else
{
ou = "blank value";
}
评论