为什么我不能用if语句改变值?
int amount;
string inputbalk = inputbar.Text;
if (inputbalk== string.Empty)
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
if (inputbalk != string.Empty)
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
int onepercent = amount/= 100;
即使我用两个不同的if语句将它设置为1,它也会将“amount”视为未分配的变量。
如果我调试,我得到这个: “错误1使用未分配的局部变量'amount'”
感谢您的帮助,这是固定/解决的。
答案 0 :(得分:3)
只需更改第二个否则
if (inputbalk== string.Empty)
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
else
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
编译器无法确保两个if语句中的一个无论如何都会起作用,因此会产生错误,即您的变量可以 unassigned
。
在if/else
表示法中,无论如何都会完成两个代码块中的一个,因此编译器不会抛出错误,一切都会按照您的意愿运行。
答案 1 :(得分:1)
因为您可能不会进入任何if语句,从而将金额保留为未分配。你会在这一行得到错误:
int onepercent = amount /= 100;
在编译时,编译器将无法确定是否有任何if语句将导致true和设置金额。为了避免这个错误你可以(开始时):
int amount=-1;
现在你不会得到你的编译器错误,数量的值会在if语句中改变。附: ('如果'是一个陈述而不是一个循环)
答案 2 :(得分:1)
有把inputbalk作为null的机会:)
答案 3 :(得分:1)
if
不一个循环inputbalk
为string
,可以为null
,您不会检查它,因此可以碰巧是你的情况。 更改您的代码,如下所示:
if (string.IsNullOrEmpty(inputbalk))
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
else
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
希望这有帮助。
答案 4 :(得分:1)
问题是编译器无法看到该数量是明确分配的。 您知道inputBalk在第一次和第二次评估之间无法更改,而且恰好其中一个if条件为真,但编译器不会检查这一点。它只看到在使用之前没有分配金额的路径,这是不允许的。
你应该使用if / else而不是两次测试相同的条件。
if (...)
{
amount = 1;
}
else
{
amount = 2;
}
现在,编译器可以看到代码中的每个可能路径都会导致数量明确分配。
还有许多其他优点:代码更简洁,更易于阅读和更易于维护。此外,不进行两次相同的检查会带来轻微的性能优势。
答案 5 :(得分:1)
但是,您也可以使用Convert.ToInt32()方法遇到FormatException。考虑使用int.tryParse作为替代方案。
答案 6 :(得分:0)
给这个爆炸:
if (!int.TryParse(inputbar.Text, out amount))
amount = 1;