2010-08-04 7 views
13

Manchmal möchte ich die Argumentation bestimmter API-Änderungen wissen. Da Google mir bei dieser Frage nicht geholfen hat, kann StackOverflow vielleicht. Warum hat Microsoft die Hilfsmethode GetAttribute für XML-Elemente entfernt? In der System.Xml Welt gab es XmlElement.GetAttribute("x") wie getAttribute in MSXML davor, die beide entweder den Attributwert oder eine leere Zeichenfolge zurückgeben, wenn sie fehlen. Mit XElement gibt es SetAttributeValue aber GetAttributeValue wurde nicht implementiert.Warum hat XElement keine GetAttributeValue-Methode?

es ist sicherlich nicht zu viel Arbeit Logik zu modifizieren, um die XElement.Attribute("x").Value Eigenschaft zu testen und zu verwenden, aber es ist nicht so bequem und die Bereitstellung der Nutzenfunktion eine Art und Weise (SetAttributeValue), aber nicht die andere scheint seltsam. Kennt jemand da draußen die Gründe für die Entscheidung, damit ich mich ausruhen kann und vielleicht etwas daraus lerne?

Antwort

15

Sie sollen bekommen Wert wie dieses Attribut:

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

UPDATE:

Beispiele:

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

usw.

diesen Artikel: http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx. Das gleiche gilt für Attribute.

+0

Das gibt eine Instanz von XAttribute zurück. Keine Ahnung, wie das Umstellen auf System.Type hilfreich sein wird. –

+0

Nicht zu System.Type lol, welcher Typ auch immer Sie benötigen. Ich werde meine Antwort aktualisieren. – Necros

+1

Schön, wusste nicht über die Typumwandlung für diese Klassen. Vielen Dank! –

5

Nicht sicher, genau der Grund, aber mit C# Erweiterung Methoden können Sie das Problem selbst lösen.

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

Ermöglicht:

element.GetAttributeValue("myAttributeName"); 
+4

Ich mache oft im Wesentlichen was diese Funktion tut und sicherlich ist dies der beste Ansatz IMO, aber ich interessiere mich für * warum * GetAttribute fehlt von der API, wenn es in früheren Modellen war und sie bieten einen Helfer für die Setter –