我是c#的新手,需要有关列表和对象的帮助。
严格按照建议编辑..
我真正想做的是
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);
我的列表现在包含3个元素 - 红色,蓝色,白色。
我想我可以这样做:
Item MyItem = new Item();
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 :(得分:4)
在这种情况下读取文件的更好方法是使用包装您读取的FileStream的StreamReader。 StreamReader允许您每行迭代文件行,而无需事先读取整个文件。
所以你可以这样做:
while((var line = streamReader.ReadLine())!= null) { //在这里迭代文件 }
在while循环中,您可以设计一个简单的状态机,根据您在文件中的位置读取标题,作业或作业详细信息。
答案 1 :(得分: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,但你的问题有点不清楚。