2010-08-04 11 views
13

Parfois, j'aimerais connaître le raisonnement de certaines modifications de l'API. Puisque Google ne m'a pas aidé avec cette question, peut-être StackOverflow peut. Pourquoi Microsoft a-t-il choisi de supprimer la méthode d'assistance GetAttribute sur les éléments XML? Dans le monde System.Xml il y avait XmlElement.GetAttribute("x") comme getAttribute dans MSXML avant, tous les deux qui retournent la valeur d'attribut ou une chaîne vide lorsqu'ils manquent. Avec XElement, il y a mais GetAttributeValue n'a pas été implémenté. Il est certainement pas trop de travail pour modifier la logique pour tester et utiliser la propriété XElement.Attribute("x").Value mais ce n'est pas aussi pratique et fournir la fonction d'utilité dans un sens (SetAttributeValue) mais pas l'autre semble bizarre. Est-ce que quelqu'un là-bas connaît les raisons de la décision pour que je puisse me reposer facilement et peut-être en apprendre quelque chose?Pourquoi XElement n'a-t-il pas de méthode GetAttributeValue?

Répondre

15

Vous êtes censé obtenir une valeur d'attribut comme ceci:

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

MISE À JOUR:

Exemples:

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

etc.

Voir cet article: http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx. La même chose fonctionne pour les attributs.

+0

Cela renvoie une instance de XAttribute. Aucune idée de la façon dont le lancer à System.Type va être utile. –

+0

Non à System.Type lol, quel que soit le type dont vous avez besoin. Je vais mettre à jour ma réponse. – Necros

+1

Nice, ne savait pas sur la conversion de type sur ces classes. Merci! –

5

Vous ne savez pas exactement la raison, mais avec les méthodes d'extension C#, vous pouvez résoudre vous-même le problème.

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

Permet:

element.GetAttributeValue("myAttributeName"); 
+4

Je finis souvent par faire essentiellement ce que cette fonction fait et certainement c'est la meilleure approche IMO mais je suis intéressé par * pourquoi * GetAttribute est absent de l'API quand il a été là dans les modèles précédents et ils fournissent une aide pour le setter –