C# 从单个嵌套元素中检索值的正确方法是什么?

C# 从单个嵌套元素中检索值的正确方法是什么?,c#,winforms,linq-to-xml,xelement,C#,Winforms,Linq To Xml,Xelement,要重设嵌套XElement的值,我的代码中有以下内容: XElement xml = new XElement("UserDefinedSettings", new XElement("RootFolder", new XElement("FolderName", "User Input Goes Here"))); xml.Save("UserDefinedSettings.xml"); 这使我可以将其保存到硬盘: <?xml version="1.0" encoding="utf-

要重设嵌套XElement的值,我的代码中有以下内容:

XElement xml = new XElement("UserDefinedSettings", new XElement("RootFolder", new XElement("FolderName", "User Input Goes Here")));

xml.Save("UserDefinedSettings.xml");
这使我可以将其保存到硬盘:

<?xml version="1.0" encoding="utf-8"?>
<UserDefinedSettings>
  <RootFolder>
    <FolderName>User Input Goes Here</FolderName>
  </RootFolder>
</UserDefinedSettings>
我是LinqXML新手,我想知道我所做的是否是正确的方法

起初,我一直在使用下面的代码行来获取文件夹的名称,但我知道必须有更好的方法,在搜索完这里的示例后,我将使用上面的代码

string s =xdoc.Element("UserDefinedSettings").Element("RootFolder").Element("FolderName").Value;

你所拥有的应该是好的(更新的方式),只要你确定这些元素存在。但是,如果其中任何一个异常都不存在,它就有引发空引用异常的风险。我通常使用Elements()而不是Element()进行查询。Elements()返回一个IEnumerable,您可以将它与更多Elements()查询(或其他任何查询)安全地链接在一起。例如,您可以考虑:

var folder = (string)xdoc.Elements("UserDefinedSettings").Elements("RootFolder").Elements("FolderName").FirstOrDefault();
当我需要属性或元素的值时,我通常会做的另一件事是使用字符串强制转换我的XElements和XAttributes,就像我上面所做的那样。转换为字符串的null值将返回null字符串,从而防止使用.value调用时出现null引用异常。

也可以:

xdoc.XPathSelectElement(“/UserDefinedSettings/RootFolder/FolderName”).Value


我更喜欢使用XPath,因为它简洁明了,但这是你的选择。

我就是这样做的,伙计,归根结底,这实际上是个人喜好。
var folder = (string)xdoc.Elements("UserDefinedSettings").Elements("RootFolder").Elements("FolderName").FirstOrDefault();