我想序列化的情况下,‘MyClass的’到一个XML文件,一次一个。每个实例都有一个名为'ID'的int属性。目标文件已经有一些相同类型的项目,并且在这些项目之后追加新项目。我希望待插入实例的ID值比XML中最大的现有项目高1。C#继承字段值到混合了基类的字段值
我有以下的通用类:
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;
}
//...
}
我用这样的该类:
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;
}
的问题是,在ContentDataManager.GetNextId(...)方法的foreach循环中,有一个if语句实际上不起作用operly。当我调试,我添加了两个表:“数据”和“data.ID” 这里了有趣的部分:为“数据”的手表显示,ID属性的值是1。在森那一次,“数据.ID”属性显示为0
值我敢肯定,这个错误是与遗传有关。我应该如何更改我的代码,以便不会出现此错误?
你为什么要瞒着'MyBaseClass'了'ID'在'使用'new'操作MyClass'?该变量是公共的,并由你的'MyClass'继承。 – 2012-01-31 01:17:34