您可以创建一个易于重用的扩展方法。放在静态类中
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) 中,微软引入了空传播运算符?.,大大简化了事情:
var value = parent.Element("name")?.Value;
即使未找到该元素,这也会简单地将值设置为 null。
如果您想返回除null 之外的其他值,也可以将其与合并运算符?? 结合使用:
var value = parent.Element("name")?.Value ?? "";