if 语句不能更改局部变量
本文关键字:局部变量 不能 语句 if | 更新日期: 2023-09-27 18:31:32
为什么我不能用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;
它将"amount"视为一个未赋值的变量,即使我将其设置为 1,通过两个不同的 if 语句。
如果我调试,我会得到这个:"错误 1 使用未赋值的局部变量'金额'"
感谢您的帮助,它已修复/解决。
如果换成其他
if (inputbalk== string.Empty)
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
else
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
编译器无法确保两个 if 语句中的一个无论如何都可以工作,因此它会抛出错误,您的变量量可以unassigned
。
在if/else
表示法中,无论如何都会完成两个代码块中的一个,因此编译器不会抛出错误,一切都会按你想要的方式工作。
将输入巴尔克作为空:)
-
if
不是循环 - 考虑到
inputbalk
是string
,它可能是一个null
,你不检查它,所以可能发生这是你的情况。
更改代码,如下所示:
if (string.IsNullOrEmpty(inputbalk))
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
else
{
amount = Convert.ToInt32(inputbalk);
amount = 1;
}
希望这有帮助。
问题是编译器看不到肯定分配的数量。您知道 inputBalk 不能在第一次和第二次计算它之间更改,并且恰好其中一个 if 条件将为真,但编译器不会检查这一点。它只看到有一个路径在使用之前未分配金额,这是不允许的。
您应该使用 if/else 而不是两次测试相同的条件。
if (...)
{
amount = 1;
}
else
{
amount = 2;
}
现在编译器可以看到,通过代码的每个可能路径都会导致明确分配的数量。
还有许多其他优点:代码更简洁,更易于阅读且更易于维护。此外,不执行两次相同的检查会略微提高性能。
但是,您也可以使用 Convert.ToInt32() 方法遇到 FormatException。考虑使用 int.tryParse 作为替代方法。
因为您很可能不会进入任何 if 语句,从而使金额保持未分配状态。您将在此行上收到错误:
int onepercent = amount /= 100;
在编译时,编译器将无法确定任何 if 语句是否会导致 true 和金额设置。要避免此错误,您可以(在开始时)执行以下操作:
int amount=-1;
现在你不会得到编译器错误,并且 if 语句中的金额值将更改。 附言("如果"是一个语句而不是一个循环)
试一试:
if (!int.TryParse(inputbar.Text, out amount))
amount = 1;