2012-07-28 56 views
0

我已經半夜了,仍然試圖得到這個空例外計算出來。我讀了一些關於這個問題的文本,但沒有幫助我以任何方式,對我來說是什麼問題,因爲它應該工作:/這只是崩潰在這段代碼:ArgumentNullException我想不通的數組中

Private void UpdateGUI() 
{ 
    string selectedItem = cmbDisplayOptions.Items[cmbDisplayOptions.SelectedIndex].ToString(); 
    rdbtReserv.Checked = true;    
    lstReservations.Items.Clear();   
    lstReservations.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem)); 
} 

lstReservations.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem));給我ArgumentNullExeption,但對我來說它不應該這樣做。

中的AddRange將字符串selectedItem設置爲其他類:

public string[] GetSeatInfoStrings(string selectedItem) 
    { 
     int count = GetNumOfSeats(selectedItem); 

     if (count <= 0) 
     { 
      return null; 
     } 

     string[] strSeatInfoStrings = new string[count]; 

     for (int index = 0; index <= m_totNumOfSeats - 1; index++) 
     { 
      strSeatInfoStrings[index] = GetSeatInfoAt(index); 
     } 

     return strSeatInfoStrings; 

    } 

int count = GetNumOfSeats(selectedItem);去這裏和一個int回報:

private int GetNumOfSeats(string selectedItem) 
    { 
     if (selectedItem == "ReservedSeats") 
     { 
      return GetNumReserved(); 
     } 
     if (selectedItem == "VacantSeats") 
     { 
      return GetNumVacant(); 
     } 
     else 
     { 
      return m_totNumOfSeats; 
     } 
    } 

我已經檢查了排列有空格正確的號碼( 60),並且selectedItem有一個字符串(Allseats開頭,所以它應該返回m_totnumOfSeats這是一個60的int)但是,然後在private int GetNumOfSeats出現問題,它返回null,...爲什麼?

我看不出問題..也許因爲試圖找到問題而失明瞭。在這裏總是得到傑出的幫助,我已經學會了噸!所以也許有人可以指出我的代碼中存在的所有問題。

非常感謝任何和所有的建議!

//問候

+2

異常時是否爲'm_seatMngr'空? – Oded 2012-07-28 10:38:54

+3

檢查堆棧跟蹤並在可能的情況下發帖以幫助查找提供錯誤的代碼的確切行。 – ZafarYousafi 2012-07-28 10:40:52

+1

什麼是空格(60)! – Anirudha 2012-07-28 10:48:43

回答

3

檢查您的變量實際上是初始化並返回正確的價值觀。

GetSeatInfoStrings方法和GetNumofSeats方法中存在邏輯錯誤。

幸運的是,GetNumOfSeats方法總是會返回60,因爲您比較字符串的方式不對。這是不正確的做法,所以使用Equals方法比較喜歡

if (selectedItem.Equals("ReservedSeats")) 

有了,你會得到一個正確的輸出形式GetNumOfSeats(string)方法。

接下來的事情就是修復GetSeatInfoStrings方法中的循環,以便不會像這樣獲取數組索引超出範圍外例外。

string[] strSeatInfoStrings = new string[count]; 

    for (int index = 0; index <= count; index++) 
    { 
     strSeatInfoStrings[index] = GetSeatInfoAt(index); 
    } 

    return strSeatInfoStrings; 

還修復您的邏輯在GetSeatInfoStrings方法中返回null的部分。它應該根據你的邏輯返回一個空字符串數組,如

return new string[0]; 

這應該可能會讓你的方法工作。在調試之前,您需要非常小心您的代碼:-)

3

望着ObjectCollection的源代碼,當你打電話的AddRange和傳遞null值,你回來了ArgumentNullException。

你可以阻止這種改變這種代碼

if (count <= 0) 
{ 
    return new string[0]; 
}