【发布时间】:2015-07-24 08:52:52
【问题描述】:
我的代码中有一个奇怪的错误,我不明白它为什么会这样。我不是最有经验的代码战士,所以希望有更多经验的人能明白原因。
我正在将对象列表保存到 XML 文件中。我将对象列表传递给我的函数以进行保存,并且我有代码来检查对象是否已经存在,并且仅在对象不存在时才将对象保存到 XML 文件中。如果我按一次“保存”按钮,它会很好地创建文件,并按预期保存。如果我再次按保存,它会再次按预期工作,并且只保存新对象。
我的错误是这样的......
如果我按保存按钮 3 次然后删除文件,当我按保存并重新创建文件时,列表将保存 3 次。就好像以前的列表仍然在浮动,只是相互叠加。
这是我的保存代码... 如果有帮助,我的代码 HasElement() 是 XElement 的扩展方法,并且只返回 FirstOrDefault()。仅当 this 返回为 null 时才会保存。
public void SaveDB(List<ContactList> cl)
{
if (cl != null)
{
if (!File.Exists(DBPath))
{
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Contacts")
);
doc.Save(DBPath);
MessageBox.Show("File Created: " + DBPath);
}
MessageBox.Show(DBPath + " already exists!");
XDocument Doc = XDocument.Load(DBPath);
List<XElement> elmAdd = new List<XElement>();
XElement root = Doc.Element("Contacts");
foreach (ContactList CL in cl)
{
if (root.HasElement(CL.Name) == null)
{
if (CL.Selected == true)
{
XElement eName = new XElement(CL.Name, "true");
elmAdd.Add(eName);
}
else if (CL.Selected == false)
{
XElement eName = new XElement(CL.Name, "false");
elmAdd.Add(eName);
}
}
}
MessageBox.Show("Lists saved");
Doc.Element("Contacts").Add(elmAdd);
Doc.Save(DBPath);
} // End if null
else
{
MessageBox.Show("Debug: List is empty");
}
} // end method
【问题讨论】:
-
OT:让扩展方法“HasElement()”返回一个布尔值。比:“问:你有元素吗?答:空”。
-
处理我们正在发生的事情的最简单方法是插入一些断点并逐步完成。没有什么明显的,我的第一个猜测是
cl包含的项目比你想象的要多。
标签: c# xml linq linq-to-xml xelement