1

为什么我不能用 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;

即使我将其设置为 1,它也会通过两个不同的 if 语句将“数量”视为未分配的变量。

如果我调试,我会得到:“错误 1 ​​使用未分配的局部变量 'amount'”


感谢大家的帮助,它已修复/解决。

4

7 回答 7

3

只需将第二个 if 更改为 else

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

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

无论如何if/else,两个代码块之一都将完成,因此编译器不会抛出错误,一切都会按照您的意愿工作。

于 2012-04-18T08:45:24.197 回答
1

但是,您也可能会遇到使用 Convert.ToInt32() 方法的 FormatException。考虑使用 int.tryParse 作为替代方案。

于 2012-04-18T08:55:29.390 回答
1

因为您可能不会进入任何 if 语句,从而将金额保留为未分配。您将在此行收到错误:

 int onepercent = amount /= 100;

在编译时,编译器将无法确定是否有任何 if 语句将导致 true 和金额设置。为避免此错误,您可以(在开始时):

int amount=-1;

现在你不会得到你的编译器错误,并且金额的值将在 if 语句中改变。PS('If' 是一个语句而不是循环)

于 2012-04-18T08:43:36.613 回答
1

有可能将 inputbalk 设为 null :)

于 2012-04-18T08:45:24.383 回答
1
  1. if不是循环_
  2. 考虑inputbalkstring,它可以是一个null,你不检查它,所以可能发生它是你的情况。

更改您的代码,如下所示:

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

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

希望这可以帮助。

于 2012-04-18T08:46:37.977 回答
1

问题是编译器看不到这个数量是明确分配的。知道 inputBalk 在第一次和第二次评估之间不能改变,并且恰好有一个 if 条件为真,但编译器不会检查这一点。它只看到有一条在使用之前未分配数量的路径,这是不允许的。

您应该使用 if/else 而不是两次测试相同的条件。

if (...)
{
    amount = 1;
}
else
{
    amount = 2;
}

现在编译器可以看到通过代码的每条可能路径都会导致数量被明确分配。

还有许多其他优点:代码更简洁、更易于阅读和更易于维护。此外,不进行两次相同的检查会带来轻微的性能优势。

于 2012-04-18T08:47:20.923 回答
0

给这个爆炸:

if (!int.TryParse(inputbar.Text, out amount))
    amount = 1;
于 2012-04-18T08:48:34.700 回答