我想序列化的情況下,‘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