2012-04-18 22 views
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使用未分配的局部变量‘量’的”


感谢您的帮助球员,这是固定/解决。

+2

调试代码,看看会发生什么。 – 2012-04-18 08:43:23

+1

什么是“空变异”?据我所知,一点只能设置为0或1,从不“空”。你可以说得更详细点吗? – 2012-04-18 08:45:02

+0

尝试'if(string.IsNullOrEmpty(inputbalk)){'改为 – 2012-04-18 08:45:36

回答

3

只要改变第二,如果到别的

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

编译器不能确保无论如何,两个if语句中的一个将起作用,所以它会抛出错误,表示您的可变金额可能是unassigned

if/else表示法中,两个代码块中的任何一个都将完成,因此编译器不会抛出错误,并且所有内容都将按照您的要求工作。

1

因为您有可能不会进入任何if语句,从而使金额未分配。您将获得在这一行错误:

int onepercent = amount /= 100; 

在编译时,编译器将无法确定是否有任何的if语句,将导致真正的和数量的设置。为了避免这种错误,你可以做(​​开始):

int amount=-1; 

现在你不会得到你的编译器错误和金额的价值将在if语句改变。附: (“如果”是一个语句不是循环)

+0

保留“未分配”。空不适用于'int'。 – 2012-04-18 08:48:25

+0

错误将是“使用未分配的变量” – Habib 2012-04-18 08:50:04

+0

@HenkHolterman,如果在这种情况下未分配金额,则会生成编译时错误。 – Habib 2012-04-18 08:50:54

1

存在具有inputbalk为空:)的机会

1
  1. if循环
  2. 考虑inputbalkstring,它可以null,你不检查,所以可能发生的,它是你的情况。

更改代码,如下所示:

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

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

希望这有助于。

1

问题是,编译器无法看到该数量是明确分配的。 知道inputBalk在第一次和第二次之间不能改变它的计算结果,而且其中的一个if条件是真的,但编译器不检查这个。它只会看到有一个路径,在使用之前没有分配金额,这是不允许的。

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

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

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

还有一些其他优点:代码更简洁,更易于阅读和更易于维护。此外,不做同样的检查两次会带来轻微的性能收益。

0

给这个爆炸:

if (!int.TryParse(inputbar.Text, out amount)) 
    amount = 1; 
1

您可以但是也遇到了Convert.ToInt32()方法的出现FormatException。考虑使用int.tryParse作为替代。