Mcbaloo Ответов: 2

Почему в моем списке отображается последний добавленный элемент


У меня есть небольшая проблема, которую я попытался найти в google и найти похожие проблемы. Я попробовал некоторые решения, но все еще не смог их решить, поэтому решил открыть новый поток.
Теперь проблема заключается в том, что если я попытаюсь распечатать элементы внутри pain.transaction, я получу только один элемент для нескольких записей, что не должно быть так. Как мне обойти это? Я также не могу изменить способ чтения xml-файла. Я должен придерживаться этого подхода.

Что я уже пробовал:

    List<Transactions> tl = new List<Transactions>(); 
    Transactions t = new Transactions();
    XmlNodeList details = xmldoc.GetElementsByTagName("Dtl");
    foreach (XmlNode crdNode in details)
    {
        XmlNode CdtName = crdNode["Nm"];

        t.Name= Name.ChildNodes.Item(0).InnerText;
        //If i print out t.Name, it displays all the names.

        XmlNode CdtAddress = crdNode["PstlAdr"];

        t.Address=CdtAddress.ChildNodes.Item(0).InnerText;

    }
    XmlNodeList pmtId = xmldoc.GetElementsByTagName("ID");
    foreach (XmlNode Pm in pmtId)
    {
        XmlNode transaction = Pm["Ref"];
        t.TransactionReference =transaction.ChildNodes.Item(0).InnerText;
    }
    XmlNode instruct = Pm["Instr"];
    t.Instruction =instruct.ChildNodes.Item(0).InnerText;
}
tl.Add(t);
pain.transaction = tl; //pain.transaction contains a list of transaction

2 Ответов

Рейтинг:
0

Andy Lanng

Я взглянул на код СНиПа, и Вы, кажется, пропустили некоторые скобки. В любом случае проблема кажется простой.

Вы добавляете элемент "т" только один раз после вашего цикла. Вам нужно включить "tl.Add(t)" внутри цикла.


Рейтинг:
0

Richard MacCutchan

Вы всегда создаете только один Transactions объект и многократно устанавливать в него новые значения. Затем вы добавляете это к своему List<Transactions> перечислите так, чтобы это было все, что у вас есть. Вам нужно создать новый Transactions объект для каждого узла XML.


Mcbaloo

Извините, я просто комментирую. Я сделал то, что вы сказали. Но есть ли способ получить доступ к объектам, которые я создал внутри объекта транзакции?. Я создал объект details для хранения имени CDT и адреса Cdt. Затем имейте детали внутри транзакций. Я хочу получить CdtName из транзакций без необходимости использовать объект details напрямую

Richard MacCutchan

Если предположить, что члены класса Transactions являются общедоступными (что, похоже, так и есть), то да, вы можете извлечь их, обратившись к ним точно так же, как и при установке их значений.