2016-11-16 9 views
-2

現在、オブジェクト(学生)を追加しようとしています。私はforeachループで生徒で構成されたオブジェクトリストに作成しています。各リストオブジェクトは同じ位置を参照して終了します。したがって、各リストオブジェクトの情報は、ループが終了したときに作成された最後の生徒オブジェクトと同じです。 foreachループを使ってリストにオブジェクトを追加するために私が見つけた唯一の情報は、私がStudent stud = new Student行でやっていると思ったオブジェクトの新しいインスタンスを作成することです。foreachループを使用したリストへの追加

また、デフォルトのコンストラクタを使用し、引数の代わりにプロパティを使用してみましたが、学生をリストに追加しましたが、同じ結果が表示されます。

foreachループを使用してオブジェクトリストにオブジェクトを追加する際の助けがあれば、大歓迎です。

foreachループ:

foreach (DataRow datrow in dt.Rows) 
{ 
    Student stud = new Student(
     datrow["ID"].ToString(), 
     datrow["fName"].ToString(), 
     datrow["lName"].ToString(), 
     datrow["GPA"].ToString(), 
     datrow["Graduate"].ToString() 
    ); 
    studentList.Add(stud); 
} 

私の学生コンストラクタ:DT

   OleDbCommand cmd = new OleDbCommand(strSql, con); 
       con.Open(); 
       cmd.CommandType = CommandType.Text; 
       OleDbDataAdapter dc = new OleDbDataAdapter(cmd); 
       dc.Fill(ds, "ID"); 
       dt = ds.Tables["ID"]; 
       const char DELIM = ','; 
       foreach (DataRow datrow in dt.Rows) 

各オブジェクトが参照すると再であることを "これ" の情報を埋めるために使用

public Student(
    string studentID, 
    string fName, 
    string lName, 
    string studentGPA, 
    string graduate) 
{ 
    iD = studentID; 
    firstName = fName; 
    lastName = lName; 
    gPA = studentGPA; 
    grad = graduate; 
} 

声明新しいオブジェクトごとに書かれています

結果

+0

結果に問題がありますか?私の画面は、私が画面の頭​​や尾を小さくすることです。 – Jacobr365

+2

このコードは正しいように見えます。問題が他の場所ではなく、ここにあるとあなたはどのように判断しましたか? – David

+0

また、最初のスクリーンショットでは、コンストラクタの*最初の行*で一時停止したときに、 'this'の値に既に値を設定できますか?それは奇妙に思える。 – David

答えて

1

あなたのプライベート変数は、最も可能性の高い静的です。これは、変数がコンストラクタに値を持っている理由を説明します(通常のインスタンス変数ではそうではありません)。静的な値は、プロパティによって返されています(これらの値がどのように値を持っているかについても説明しています)。変数をインスタンスに変更してください(staticではありません)

+1

ニースクリスタルボール:o) –

0

こんにちはちょうどこのように外部のクラス変数を宣言してみている私の提案は、その作品が

Student stud; 

    foreach (DataRow datrow in dt.Rows) 
    { 
      stud = new Student(
      datrow["ID"].ToString(), 
      datrow["fName"].ToString(), 
      datrow["lName"].ToString(), 
      datrow["GPA"].ToString(), 
      datrow["Graduate"].ToString() 
     ); 
     studentList.Add(stud); 
    } 

私はあなたの提案をお知らせくださいかどうかを確認します。

おかげ カルティク

関連する問題