2011-07-28 2 views
0

나에게 코드C#에서의 ArrayList에 문자열을 할당하는

ArrayList dtMessages = new ArrayList(); 
while ((reader.Read())) 
{ 
        String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString(); 
        dtMessages.Add(temp); 
} 

내가 오류의 문제를 알려주세요 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."

죄송하지만 C#을 처음 사용했습니다. Pls은 나와 함께 곰. 감사합니다

EDIT : 그냥 지점을 추가하고 싶습니다. dtMessages 변수는 클래스 변수로 선언됩니다. 함수 내에서 선언되지 않습니다. 그게 문제라고 생각하니?

편집 : 코드 dtMessages의 선언에 정적 추가

namespace Faye 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
    public List<String> dtMessages=new List<String>(); 
    private List<String> LoadMessages() 
    { 
     while ((reader.Read())) 
     { 
      String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString(); 
      dtMessages.Add(temp); 
     } 
    } 
} 

}

는 정적 메서드에서 객체의 멤버에 액세스하려고하는 것처럼 소리 차이

+0

예외는 무엇입니까? –

+0

dtMessages.Add (temp); – CuriousCoder

+0

독자 유형은 무엇입니까? 또한 :'List '과 같은 generic에 대해'ArrayList'를 사용하는 이유가 있습니까? –

답변

0

하지 않습니다 . 이 같은

뭔가 :

class Program { 

    private List<string> myList = new List<string>(); 

    static void Main() { 

     // will throw error 
     myList.Add("String!"); 

    } 
} 

대신이 시도 :

class Program { 

    private static List<string> myList = new List<string>(); 

    static void Main() { 

     myList.Add("String!"); 

    } 
} 

내가 여기에 내가 컴파일되지 않습니다 처음 같은 느낌으로 잘못 생각 될 수있다.

+0

이것이 문제라고 생각합니다 +1 –

+0

아니요, 정적 메서드 내에서 액세스하지 않습니다. 비 정적 메서드 내에서 전역 변수에 액세스하고 있습니다. 전역 변수를 정적으로 선언했는데 동일한 오류가 발생했습니다. – CuriousCoder

+0

-1 첫 번째 예제에서는 컴파일러가 실행을 허용하지 않기 때문에 오류가 발생하지 않습니다. –

0

@Anthony는 가정 할 때 첫 번째 예제는 컴파일되지 않으므로 문제가 될 수 없습니다. 예외를 던지고 라인

dtMessages.Add(temp); 

이고 예외이면

"은 개체의 인스턴스로 설정되지 않은 개체 참조."는 dtAccess null 인 것을 의미하므로 초기화되지 않았 선 있기 때문에 그러나 이것은, 이상하다 :

ArrayList dtMessages = new ArrayList(); 

또 다른 가능성이 어딘가에 있다는 것입니다이 할당과 같은 :

dtMessages = null; 
,

그래서 할당을 찾는 dtMessages에 대한 모든 참조를 확인합니다.

0

목록에서 설정할 자동 속성을 만들고 임시 목록을 사용하여 데이터를 수집 한 다음 속성에 속성을 할당하십시오. 이 방법은 임시 목록을 시작하고 데이터로 채워 데이터 :

namespace Faye 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     public List<String> dtMessages { get; set; } //made property available 

     private List<String> LoadMessages() 
     { 
     var tempList = new List<string>(); 

     while ((reader.Read())) 
     { 
      String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString(); 
      tempList.Add(temp); 
      } 

     dtMessages = tempList; //assign the temp list to the property now 
     } 
    } 
} 

위의 오류가 밖으로 다음 SqlReader가 null 또는 하나 당신이 참조하는 인덱스 더 많은 경우를 기다리고있는 속성에 할당됩니다 널입니다. 디버깅을하고 모두 유효한 값을 가지고 있는지 확인합니다.다음의

0

하나 :

1 독자 객체가 null로, 당신이 라인에서 제외 얻을 :

while ((reader.Read()))

2 독자 객체가 3 개 요소를 포함하지 않습니다, 이 경우에 ArgumentOutOfRangeException을받습니다.

3 개의 독자 객체 중 하나가 null이고 .ToString() 메서드로 인해 예외가 throw됩니다.

3에 돈을 넣겠습니다

+0

나는 똑같은 말을 할 것이지만 예외는 명령 dtMessages.Add (temp)에 의해 주어진다고한다. –