您可以创建一个可以轻松重用的扩展方法。将其放在静态类中
public static string ElementValue(this XElement parent, string elementName)
{
var xel = parent.Element(elementName);
return xel == null ? "" : xel.Value;
}
现在你可以这样称呼它
string result = parent.ElementValue("name");
更新
如果null
在元素不存在时返回而不是空字符串,则可以区分空元素和不存在元素。
public static string ElementValue(this XElement parent, string elementName)
{
var xel = parent.Element(elementName);
return xel == null ? null : xel.Value;
}
string result = parent.ElementValue("name");
if (result == null) {
Console.WriteLine("Element 'name' is missing!");
} else {
Console.WriteLine("Name = {0}", result);
}
编辑
Microsoft 在 .NET Framework 类库的不同位置使用以下模式
public static bool TryGetValue(this XElement parent, string elementName,
out string value)
{
var xel = parent.Element(elementName);
if (xel == null) {
value = null;
return false;
}
value = xel.Value;
return true;
}
可以这样称呼
string result;
if (parent.TryGetValue("name", out result)) {
Console.WriteLine("Name = {0}", result);
}
更新
在 C# 6.0 (Visual Studio 2015) 中,Microsoft 引入了 null 传播运算符,?.
大大简化了事情:
var value = parent.Element("name")?.Value;
即使未找到该元素,这也会简单地将值设置为 null。
??
如果你想返回另一个值,你也可以将它与 coalesce 运算符结合使用null
:
var value = parent.Element("name")?.Value ?? "";