我正在尝试从内存流中读取文件并将其内容组织在实例列表中。文件中的某些行具有带有相应类的某些类型,并且同一类型的多行可以出现在文件中。
我当前的代码如下:
public void initializeStructure( System.IO.MemoryStream RawFile )
{
int positioninFile = 0;
while (!reachedEndOfFile)
{
string recordType = GetRecordType(RawFile, positioninFile);
int ListPosition = MessageStructure.Count;
switch (recordType)
{
case "01":
Class_01 _01 = new Class_01(Params);
MessageStructure.Add(_01);
break;
case "02":
Class_02 _02 = new Class_02(Params);
MessageStructure.Add(_02);
break;
case "04":
Class_04 _04 = new Class_04(Params);
MessageStructure.Add(_04);
break;
default:
reachedEndOfFile = true;
break;
}
string row = GetRowFromMemoryStream(RawFile, 572, positioninFile);
MessageStructure[ListPosition].WriteRule(row);
ListPosition++;
positioninFile += 572;
}
}
消息结构定义:
public List<A_Record> MessageStructure = new List<A_Record>();
因此,基本上,对于出现的每个'04'行,我都希望将一个新的Class_04实例添加到列表中,然后将该行的内容写入该实例。
遗憾的是,这没有按我希望的那样工作。如果我将Class_04的多个实例添加到列表中,则它们都具有添加的最后Class_04行的值。这可能意味着列表中的所有Class_04条目都是同一实例,并且我一直在覆盖它,而不是添加新实例。但是我不知道怎么回事,就像每次在While循环中创建一个新实例一样。
有人可以帮我吗?众所周知,直到最近我才使用PHP,Python和Javascript。因此,我可能在这里只是一个[[d'oh时刻,而错过了一些非常明显的事情。
提前感谢您的时间和精力!ListPosition
,您需要在循环开始时将其设置为Count,这样您的增量将被覆盖或多余。没有MessageStructure
的代码,无法分辨,但看起来不正确。 我将完全摆脱ListPosition
,并使用[MessageStructure.Count] - 1
或更好的MessageStructure.Last()
代替索引。
我怀疑在文件末尾也会出现一些错误,因为切换后的代码将执行,并且应该包装在if (reachedEndOfFile)
中>