2010-08-04 16 views
13

A veces me gustaría saber el razonamiento de ciertos cambios de API. Dado que Google no me ha ayudado con esta pregunta, tal vez StackOverflow sí. ¿Por qué Microsoft eligió eliminar el método de ayuda GetAttribute en elementos XML? En el mundo System.Xml había XmlElement.GetAttribute("x") como getAttribute en MSXML antes, los cuales devuelven el valor del atributo o una cadena vacía cuando faltan. Con XElement hay SetAttributeValueGetAttributeValue pero no se puso en práctica.¿Por qué XElement no tiene un método GetAttributeValue?

Ciertamente, no es demasiado trabajo modificar la lógica para probar y usar la propiedad XElement.Attribute("x").Value, pero no es tan conveniente y proporciona la función de utilidad de una manera (SetAttributeValue) pero no parece extraña. ¿Alguien conoce las razones detrás de la decisión para que pueda descansar fácilmente y tal vez aprender algo de ella?

Respuesta

15

Se supone que para obtener el valor de atributo de esta manera:

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

ACTUALIZACIÓN:

Ejemplos:

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

etc.

Ver este artículo: http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx. Lo mismo funciona para los atributos.

+0

Devuelve una instancia de XAttribute. No tengo idea de cómo lanzarlo a System.Type va a ser útil. –

+0

No a System.Type lol, cualquiera que sea el tipo que necesite. Actualizaré mi respuesta. – Necros

+1

Bien, no sabía sobre la conversión de tipo en esas clases. ¡Gracias! –

5

No estoy seguro exactamente la razón, pero con C# los métodos de extensión, se puede resolver el problema por sí mismo.

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

Permite:

element.GetAttributeValue("myAttributeName"); 
+4

a menudo terminan haciendo esencialmente lo que hace esta función y, desde luego este es el mejor enfoque de la OMI, pero estoy interesado en * por qué * GetAttribute no se encuentra en la API cuando ha sido allí en los modelos anteriores y que proporcionan una ayuda para la setter –

Cuestiones relacionadas