2016-04-27 124 views
2

Helloo,所有人。 If语句有问题。我错在哪里?C# - IF语句中变量的错误

int cnt = 0; 
int wayListNums; 

foreach (TableRow tr in allVisibleRows) 
{ 

    SPListItem itemAdd = wayList.Items.Add(); 

    if (cnt == 0) 
    { 
     wayListNums = itemAdd.ID; 
    }  

    itemAdd["wayNum"] = "WayBill № " + " " + wayListNums; 

    ................... 

这是以下错误:

错误1只使用未分配的局部变量 'wayListNums' 的....

+1

取代INT wayListNums;与int wayListNums = 0; –

+1

在使用它之前,您需要为wayListNums指定一个值。想想如果在第一次循环迭代中cnt不等于0,会发生什么。 – TimS

+0

可能[重复](http://stackoverflow.com/questions/9233000/why-compile-error-use-of-unassigned-local-variable)。明确错误的根本原因并尝试修复它。正如你在标题中提到的那样,问题不在于if语句。 –

回答

0

编译器不知道的集合allVisibleRows有时在值它可能为空或空,(只有当集合非空时变量才会获取值,并且if (cnt == 0)的计算结果为true)。在这种情况下,wayListNums的值未知。这是警告的原因。要解决这个问题,请在使用前初始化变量:

int wayListNums=0;// or some other value 

这样,如果其他条件失败,将使用默认值。

0

你必须指定默认值改为本地variable..as错误表明,它是未分配.. 这里int wayListNums = 0;// because of int default value 0

2

这里的问题是,wayListNums没有默认值时,它的声明。后来你只在if块中设置它的值,所以如果这个if没有被执行,那么这个变量仍然是未分配的,就像错误告诉你的那样。

所以,你有2种选择:

  1. 指定有关声明wayListNums一定的价值。

int wayListNums = 0;

  • 担保,每个代码分支将分配一些值的变量,访问它之前:
  • //代码

    if (cnt == 0) 
        { 
         wayListNums = itemAdd.ID; 
        } 
    else 
        { 
         wayListNums = somethingElse; 
        } 
    
    +0

    关于第二点:那里检查条件的用途是什么?true和false状态将相同的值赋给变量 –

    +0

    我编辑了答案,否则显然应该返回其他值。您的想法是,您不限制分配值uppon声明,正如您所建议的那样,您也可以不分配它,但要确保每个代码路径在使用之前分配了它。 – 3615

    0

    在C#和其他类似的语言中,编译器希望每个变量的值在可以被使用之前被初始化。在你的情况下,编译器不确定在if-block内初始化的值是否会始终被初始化,并且因为你在这个if-block的范围之外使用它,编译器会给你一个错误,说明该值没有被初始化。简单设置

    int wayListNums = 0; 
    

    将解决该问题。

    0

    分配一个值到int

    int wayListNums = 0;