2012-07-28 2 views
0

나는 밤늦게까지 계속이 null 예외를 알아 내려고 노력했습니다. 나는이 문제에 대한 텍스트의 몇 가지를 읽고 그러나 아무도 문제가 작동해야으로 무엇인지 나에게 어떤 식 으로든 나를 도왔습니다알아낼 수없는 배열의 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,하지만 나에게 그렇게해서는 안된다.

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; 
     } 
    } 

은 (공간의 정확한 숫자를

addrange는 다른 클래스에 문자열의 selectedItem을 전송 60) 그리고 selectedItem에는 문자열이 있습니다 (Allseats가 시작해야하므로 m_totnumOfSeats은 60의 int입니다). 그렇지만 private int GetNumOfSeats에서 무언가가 잘못되어 null이 반환됩니다 ... 왜 그런가요?

문제가 보이지 않습니다. 문제를 찾으려고 시도했을 수도 있습니다. 항상 뛰어난 도움을 얻었고 나는 톤을 배웠습니다 !! 어쩌면 누군가가 내 코드에있는 모든 문제를 지적 할 수 있습니다.

미리 조언 해 주셔서 감사합니다. 당신이 AddRange 전화 및 null 값을 전달 ObjectCollection의 소스 코드를 보면

// 감사합니다

+2

예외가 발생할 때'm_seatMngr'는 null입니까? – Oded

+3

stacktrace를 확인하고 가능하다면 오류를 제공하는 정확한 코드 줄을 찾는 데 도움이됩니다. – ZafarYousafi

+1

공백 (60)은 무엇입니까! – Anirudha

답변

3

확인을 변경하는 것을 방지 할 수있다.

GetSeatInfoStrings 메서드와 GetNumofSeats 메서드에 논리 오류가 있습니다.

GetNumOfSeats 메서드는 문자열을 비교하는 잘못된 방법으로 인해 항상 60을 반환합니다. 그것은 올바른 방법이 아니다, 그래서 그와

if (selectedItem.Equals("ReservedSeats")) 

같은 비교를 위해 Equals 메서드를 사용하면 적절한 출력 형식 GetNumOfSeats (문자열) 메소드를 얻을 것이다.

다음은 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

, 당신은 경우 ArgumentNullException을 다시 얻을.

당신은 당신의 변수가 실제로 초기화 반환 정확한 값을하는 경우는이 코드를

if (count <= 0) 
{ 
    return new string[0]; 
} 
관련 문제