Я пытаюсь сериализовать экземпляры MyClass в файл XML, по одному за раз.Каждый экземпляр имеет свойство int с именем 'ID'.В целевом файле уже есть некоторые элементы того же типа, и я добавляю новые элементы после них.Мне бы хотелось, чтобы значение идентификатора экземпляра, который будет вставлен, было на 1 больше, чем самый большой существующий элемент в XML.
У меня есть следующий общий класс:
public class ContentDataManager<T> where T : MyBaseClass
{
private static string _contentLocation = "Content/Data/";
private const string DEFAULT_FILEPATH = "data.xml";
public static int GetNextId(string filepath = DEFAULT_FILEPATH)
{
var allData = DeserializeAll(filepath);
int largestId = 0;
foreach (T data in allData)
{
if (data.ID > largestId)
{
largestId = data.ID;
}
}
return largestId + 1;
}
//...
}
I'mиспользуя этот класс следующим образом:
public class MyClass : MyBaseClass
{
public string Name;
public float Size;
public new int ID;
public static MyClass CreateNew(string name, float size)
{
MyClass newClass = new MyClass();
newClass.Name = name;
newClass.Size = size;
newClass.ID = ContentDataManager<MyClass>.GetNextId(DefaultFilepath);
return newClass;
}
MyBaseClass выглядит следующим образом:
public abstract class MyBaseClass
{
//...
[ContentSerializerIgnore]
public int ID = 0;
}
Проблема в том, что в цикле foreach метода ContentDataManager.GetNextId (...) естьесли утверждение, которое на самом деле не работает должным образомКогда я отлаживал, я добавил два наблюдения: «data» и «data.ID». Вот интересная часть: Отслеживание «data» показывает, что значение свойства ID равно 1. В то же время, «Свойство data.ID 'показывает значение 0.
Я уверен, что эта ошибка связана с наследованием.Как мне изменить свой код, чтобы я не получил эту ошибку?