2011-05-23 51 views
0

我是c#的新手,需要列表和對象方面的幫助。c#list <t>;如何添加像foreach循環但沒有foreach的對象?

的建議嚴重編輯..

我真正想要做的是

List<Item> MyList = new List<Item>(); 

Item MyItem = new Item(); 

MyItem.Colour = "red"; 
MyList.Add(MyItem); 
MyItem.Colour = "blue"; 
MyList.Add(MyItem); 
MyItem.Colour = "white"; 
MyList.Add(MyItem); 

而我的列表現在將包含三個元素 - 紅色,藍色,白色。

我想我可以做到這一點:

項目MyItem =新的項目();

MyItem.Colour = "red"; 
MyList.Add(MyItem); 

MyIten = new Item(); 
MyItem.Colour = "blue"; 

MyItem = new Item(); 
MyList.Add(MyItem); 

MyItem = new Item(); 
MyItem.Colour = "white"; 
MyList.Add(MyItem); 

再次,這被簡化了。有了我的真實數據,還有更多元素。

我會試試看;

TIA - 安德魯

+0

聽起來像您的問題源於您從文本文件中讀取的位置。如果你有一個完美的方式來做到這一點,那麼其餘的事情將很容易發生。想發佈你有什麼? – CRice 2011-05-23 06:28:07

+0

您能否提供該文本文件的具體列表? – 2011-05-23 07:02:37

回答

2

根據你的描述,我猜你有一個範圍問題。你的代碼應該看起來像這樣...要特別注意每個變量的設置。此外,對於這些類型的場景,創建一個名爲Parse的靜態工廠方法通常會有所幫助,該方法從字符串構造對象。

string line; 
System.IO.StreamReader file = new System.IO.StreamReader(filename); 

Job myJob = null; 
Detail myDetail = null; 
while((line = file.ReadLine()) != null) 
{ 
    var lineType = getLineType(line); 
    switch(lineType){ 
     case Job: 
      myJob = new Job(); 
      break; 
     case newDetail: 
      if(myDetail != null) 
      { 
       myJob.Details.Add(myDetail); 
      } 
      Detail myDetail = new Detail(); 
      break; 
     case continueDetail: 
      //set some detail properties 
      break; 
    } 

}

再來一次

List<Item> MyList = new List<Item>(); 
Item MyItem = new Item(); 
MyItem.Colour = "red"; 
MyList.Add(MyItem); 
MyItem = new Item(); //<-- this is what you are missing 
MyItem.Colour = "blue"; 
MyList.Add(MyItem); 

HTH,但你的問題是有點不清楚。

+0

我正在使用該代碼來讀取流;在while語句中,我有一個switch case塊,根據不同類型的線路將處理髮送到不同的例程。 – andrew 2011-05-23 07:08:53

+0

啊,我現在看到你的問題被埋在中間。 – Yaur 2011-05-23 07:20:03

+0

@andrew請讓我知道,如果這使你朝着正確的方向發展。如果不是的話,你應該從你的問題中刪除儘可能多的無關信息,並把重點放在與你試圖解決的問題直接相關的部分上。 – Yaur 2011-05-23 07:37:50

4

一種更好的方式來讀取的情況下的文件將使用一個包裝你從閱讀的FileStream一個StreamReader。 StreamReader允許您在每行中遍歷文件行,而無需事先讀取整個文件。

所以,你可以做這樣的事情:

而(!(VAR線= streamReader.ReadLine())= NULL){ // 迭代通過文件在這裏 }

裏面的while循環你可以設計一個簡單的狀態機,根據你在文件中的位置讀取一個頭文件,一個Job或者Job details。