Почему в XElement нет метода GetAttributeValue? - PullRequest
13 голосов
/ 05 августа 2010

Иногда мне хотелось бы узнать причину некоторых изменений API.Так как Google не помог мне с этим вопросом, возможно, StackOverflow может.Почему Microsoft решила удалить вспомогательный метод GetAttribute для элементов XML?В мире System.Xml перед MSXML стояло XmlElement.GetAttribute("x") подобно getAttribute, оба из которых возвращали либо значение атрибута, либо пустую строку в случае отсутствия.С XElement есть SetAttributeValue, но GetAttributeValue не реализовано.

Конечно, не так много работы по изменению логики для тестирования и использования свойства XElement.Attribute("x").Value, но это не так удобно и предоставляет утилитуфункционировать в одну сторону (SetAttributeValue), а в другую - странно.Кто-нибудь знает причины этого решения, чтобы я мог легко отдохнуть и, возможно, чему-то научиться?

Ответы [ 2 ]

16 голосов
/ 05 августа 2010

Вы должны получить значение атрибута так:

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. То же самое работает для атрибутов.

5 голосов
/ 05 августа 2010

Не совсем точно причина, но с помощью методов расширения C # вы можете решить проблему самостоятельно.

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

Позволяет:

element.GetAttributeValue("myAttributeName");
...