我正在向我的分幅添加一個新的複選框,並且需要將其值保存到設置文件中。 我想用下面的代碼來做到這一點:如果XML元素不存在,則添加XML元素
private void CloseDisconnectedCbx_CheckedChanged(object sender, EventArgs e)
{
XDocument doc = XDocument.Load(BotsFile);
var savedBots = doc.Descendants("SavedBots")
.Where(p => p.Element("BotName").Value.ToLower()
== SelectBotBox.SelectedItem.ToString().ToLower())
.Elements("CloseDisconnected").FirstOrDefault();
if (savedBots == null)
{
try
{
doc.Descendants("SavedBots")
.Where(p => p.Element("BotName").Value.ToLower()
== SelectBotBox.SelectedItem.ToString().ToLower())
.FirstOrDefault()
.Add(new XElement("CloseDisconnected",
Convert.ToInt32(CloseDisconnectedCbx.Checked)));
doc.Save(BotsFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
它確實增加了新的元素,但是,它看起來像這樣:
<CloseDisconnected/> VALUE
它永遠不會結束元素的結束。 我的代碼錯了嗎,還是我忘記了一些東西?
只有在XML文件中找不到元素時,纔會觸發此代碼。 如果是,更改將由另一個按鈕處理。
顯示,增加了closedisconnected請 – HatSoft 2012-07-30 14:00:48
真的很難讀那些oneliners的代碼,我認爲將有助於可讀性低,如果它被分成幾個線(如提取搜索值分離變量,要添加的元素,等等。 )。 – Giedrius 2012-07-30 14:02:30
@HatSoft用於添加CloseDisconnected的代碼位於Try子句內。 – Rickard 2012-07-30 14:06:35