Я пытаюсь прочитать файл из потока памяти и упорядочить его содержимое в списке экземпляров. Определенные строки в файле имеют определенные типы с соответствующими классами, и в файле может отображаться несколько строк одного типа.
Мой текущий код выглядит примерно так:
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>();
Пример того, как выглядят эти классы:
public class Class_01 : A_Record
{
public Class_01( Dictionary<string, A_AbstractClass> Params ) : base(Params)
{
RecordType = "01";
RecordTitle = "Name of record";
}
}
A_Record abstract
public abstract class A_Record
{
public virtual string RecordType { get; set; }
public virtual string RecordTitle { get; set; }
public int RecordLength { get; set; }
public void WriteRule( string Vektis_Rule )
{
int writePosition = 0;
foreach ( KeyValuePair<string, A_Element> Element in Elementen )
{
string ElementValue = Vektis_Rule.Substring( writePosition, Element.Value.Length );
Element.Value.Write( ElementValue );
writePosition += Element.Value.Length;
}
}
public A_Record(Dictionary<string, A_Gegevenselement> Volgnummers)
{
Elementen = Volgnummers;
RecordLength = 0;
foreach (KeyValuePair<string, A_Gegevenselement> Element in Elementen)
{
var currentElement = Elementen[Element.Key];
currentElement.StartingPosition = RecordLength;
RecordLength += currentElement.Length;
}
}
}
Таким образом, в основном, для каждой строки '04', которая появляется, я Я хочу добавить новый экземпляр Class_04 в список, а затем записать содержимое этой строки в экземпляр.
К сожалению, это не работает, как я надеялся. Если я добавлю несколько экземпляров Class_04 в список, все они будут иметь значение последней добавленной строки Class_04. Это, вероятно, означает, что все записи Class_04 в Списке являются одним и тем же экземпляром, и что я постоянно перезаписываю его вместо добавления нового экземпляра. Но я не понимаю, как это может быть, когда создается впечатление, что я каждый раз создаю новый экземпляр в то время как l oop.
Может ли кто-нибудь мне помочь? Как вы знаете, до недавнего времени я работал только с PHP, Python и Javascript. Так что у меня может быть просто d'oh момент здесь и я пропускаю что-то очень очевидное.
Заранее спасибо за ваше время и усилия!