为什么XElement没有GetAttributeValue方法?

时间:2010-08-04 23:13:25

标签: c# linq xelement system.xml

有时我想知道某些API更改的原因。由于谷歌没有帮助我解决这个问题,也许StackOverflow可以。为什么Microsoft选择删除XML元素上的GetAttribute辅助方法?在System.Xml世界中,之前在MSXML中有XmlElement.GetAttribute("x")之类的getAttribute,它们都会在缺失时返回属性值或空字符串。 XElement SetAttributeValueGetAttributeValue未实现。

当然,修改逻辑来测试和使用XElement.Attribute("x").Value属性并不是太多工作,但它不是那么方便并且以一种方式提供效用函数(SetAttributeValue)但是另一种看起来并不奇怪。有没有人知道决定背后的原因,以便我可以轻松地休息,也许可以从中学到一些东西?

2 个答案:

答案 0 :(得分:16)

你应该得到这样的属性值:

var value = (TYPE) element.Attribute("x");

<强>更新

示例:

var value = (string) element.Attribute("x");
var value = (int) element.Attribute("x");

请参阅此文章:http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx。同样适用于属性。

答案 1 :(得分:5)

不确定原因,但使用C#扩展方法,您可以自己解决问题。

public static string GetAttributeValue(this XElement element, XName name)
{
    var attribute = element.Attribute(name);
    return attribute != null ? attribute.Value : null;
}

允许:

element.GetAttributeValue("myAttributeName");