2011-05-23 56 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。