Почему XElement не имеет метода GetAttributeValue?
Иногда мне хотелось бы знать аргументы некоторых изменений API. Поскольку Google не помог мне с этим вопросом, возможно, может быть, StackOverflow. Почему Microsoft решила удалить вспомогательный метод GetAttribute
для элементов XML? В мире System.Xml
в MSXML был XmlElement.GetAttribute("x")
как GetAttribute
, оба из которых возвращают либо значение атрибута, либо пустую строку при отсутствии. С XElement
там SetAttributeValue
, но GetAttributeValue
не было реализовано.
Конечно, не слишком много работы по модификации логики для тестирования и использования свойства XElement.Attribute("x").Value
, но это не так удобно и предоставление функции полезности в одну сторону (SetAttributeValue
), но не другая кажется странной. Кто-нибудь знает причины решения, чтобы я мог спокойно отдохнуть и, возможно, узнать что-то от него?
Ответы
Ответ 1
Вы должны получить значение атрибута следующим образом:
var value = (TYPE) element.Attribute("x");
UPDATE:
Примеры:
var value = (string) element.Attribute("x");
var value = (int) element.Attribute("x");
и др.
Смотрите эту статью: http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx. То же самое работает для атрибутов.
Ответ 2
Не уверен точно, почему, но с помощью методов расширения С# вы можете решить проблему самостоятельно.
public static string GetAttributeValue(this XElement element, XName name)
{
var attribute = element.Attribute(name);
return attribute != null ? attribute.Value : null;
}
Позволяет:
element.GetAttributeValue("myAttributeName");