2016-11-16 65 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); 
    } 

請讓我知道你的建議。

感謝 KARTHIK