В настоящее время я работаю над небольшим приложением для управления финансами и использую XmlSerializer для сохранения своих данных. Я поддерживаю основной список (allRecords), содержащий все данные, и два отдельных списка (incomeList и CostList), используемые для отображения пользовательского интерфейса.
Моя цель — обеспечить, чтобы при сохранении все новые записи из подсписков объединялись в основной список без создания дубликатов. В настоящее время я обрабатываю это с помощью проверки .Contains() перед добавлением.
Мой вопрос: является ли этот подход чистым или я могу столкнуться с проблемами, связанными со ссылками на объекты (ссылочное равенство)? Есть ли более эффективный или «лучший» способ синхронизации этих списков перед сериализацией?
Вот мой код:
public void LoadData()
{
XmlSerializer serializer = new XmlSerializer(typeof(List));
using var stream = new FileStream("Data.xml", FileMode.Open);
allRecords = (List) serializer.Deserialize(stream);
foreach (var record in allRecords)
{
if (record.Type == "Income")
{
incomeList.Add(record);
}
else if(record.Type == "Expense")
{
expenseList.Add(record);
}
}
}
public void SaveData()
{
XmlSerializer serializer = new XmlSerializer(typeof(List));
using var stream = new FileStream("Statement.xml", FileMode.Create);
foreach (var income in incomeList)
{
if (!allRecords.Contains(income))
{
allRecords.Add(income);
}
}
foreach (var expense in expenseList)
{
if (!allRecords.Contains(expense))
{
allRecords.Add(expense);
}
}
serializer.Serialize(stream, allRecords);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... ore-saving