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 语句不能更改局部变量

如果换成其他

        if (inputbalk== string.Empty)
        {
            amount = Convert.ToInt32(inputbalk);
            amount = 1;
        }
        else
        {
            amount = Convert.ToInt32(inputbalk);
            amount = 1;
        }

编译器无法确保两个 if 语句中的一个无论如何都可以工作,因此它会抛出错误,您的变量量可以unassigned

if/else表示法中,无论如何都会完成两个代码块中的一个,因此编译器不会抛出错误,一切都会按你想要的方式工作。

有可能

将输入巴尔克作为空:)

  1. if不是循环
  2. 考虑到inputbalkstring,它可能是一个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;