2016-04-27 122 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;