Por que o Xelement não tem um método getAttributeValue?
-
25-09-2019 - |
Pergunta
Às vezes eu gostaria de saber o raciocínio de certas mudanças na API. Como o Google não me ajudou com essa pergunta, talvez o Stackoverflow possa. Por que a Microsoft escolheu remover o GetAttribute
Método auxiliar em elementos XML? No System.Xml
mundo havia XmlElement.GetAttribute("x")
Curti getAttribute
No msxml antes dele, os quais retornam o valor do atributo ou uma string vazia ao ausente. Com XElement
há SetAttributeValue
mas GetAttributeValue
não foi implementado.
Certamente não é muito trabalho para modificar a lógica para testar e usar o XElement.Attribute("x").Value
propriedade, mas não é tão conveniente e fornece a função de utilidade de uma maneira (SetAttributeValue
) Mas não o outro parece estranho. Alguém lá fora sabe as razões por trás da decisão para que eu possa descansar facilmente e talvez aprender algo com ela?
Solução
Você deveria obter valor de atributo como este:
var value = (TYPE) element.Attribute("x");
ATUALIZAR:
Exemplos:
var value = (string) element.Attribute("x");
var value = (int) element.Attribute("x");
etc.
Veja este artigo: http://www.hanselman.com/blog/improvinglinqcodesmellwithExplicitandimplicticConverSionOperators.aspx. A mesma coisa funciona para atributos.
Outras dicas
Não tenho certeza exatamente do motivo, mas com os métodos de extensão C#, você pode resolver o problema sozinho.
public static string GetAttributeValue(this XElement element, XName name)
{
var attribute = element.Attribute(name);
return attribute != null ? attribute.Value : null;
}
Permite:
element.GetAttributeValue("myAttributeName");