2011-07-28 18 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変数はクラス変数として宣言されています。関数内では宣言されません。それは問題だと思いますか?

EDIT: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がヌルであることを意味し、それが初期化されていない場合ラインがあるので、これは、奇妙です:

dtMessages = null; 

ArrayList dtMessages = new ArrayList(); 

別の可能性は、どこかのような割り当てがあるということです

だから、私は割り当てを探す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であるか、あなたが参照しているインデックスの一つ以上nullです。私はデバッグして、すべてが有効な値を持っていることを確認します。次の

0

ワン:

の1-リーダーオブジェクトがnullで、次の行で例外を取得:

while ((reader.Read()))

2 - リーダーオブジェクトは、3つの要素が含まれていません、その場合、ArgumentOutOfRangeExceptionが返されます。

リーダー内の3つのオブジェクトがnullであり、.ToString()メソッドのために例外がスローされる

私はお金を3に入れます

+0

私は同じことを言いますが、例外は命令dtMessages.Add(temp)によって与えられると言います。 –

関連する問題