2010-01-14 5 views
2

Pour votre information, Ceci est très similaire à ma dernière question: Is there a faster way to check for an XML Element in LINQ to XML?Existe-t-il un moyen plus rapide de rechercher un élément XML dans LINQ to XML et d'analyser un booléen?

Actuellement, je suis en utilisant la méthode d'extension suivante que je fait pour récupérer les valeurs booléennes des éléments en utilisant LINQ to XML. Il utilise Any() pour voir s'il y a des éléments avec le nom donné, et s'il y en a, il analyse la valeur d'un booléen. Sinon, il renvoie false. L'utilisation principale de cette méthode est lorsque j'analyse du XML en objets C#, donc je ne veux pas que quelque chose explose quand un élément n'est pas là. Je pourrais le changer pour essayer d'analyser, mais pour l'instant je suppose que si l'élément est là, alors l'analyse devrait réussir.

Y a-t-il une meilleure façon de procéder?

/// <summary> 
/// If the parent element contains a element of the specified name, it returns the value of that element. 
/// </summary> 
/// <param name="x">The parent element.</param> 
/// <param name="elementName">The name of the child element to check for.</param> 
/// <returns>The bool value of the child element if it exists, or false if it doesn't.</returns> 
public static bool GetBoolFromChildElement(this XElement x, string elementName) 
{ 
    return x.Elements(elementName).Any() ? bool.Parse(x.Element(elementName).Value) : false; 
} 
+0

Vous pouvez simplement utiliser une regex pour un usage particulier. return re.compile ('. * <' + nomElément + '>. *'). match (xml.ToString()) –

Répondre

4

Très similaire à la dernière fois:

return ((bool?) x.Element(elementName)) ?? false; 

Notez l'utilisation de la conversion au type Boolean nullable, plutôt que la version non annulable; la version non nullable lancera une exception si l'entrée est nulle.

L'utilisation de l'opérateur de coalescence nulle signifie ici que le type d'expression global est juste bool.

+0

Holy cow, Je n'ai jamais pensé que l'opérateur de coalescence nul le ferait! Tu es l'homme. –

+0

@SkippyFire: L'opérateur de coalescence nulle est génial dans les bonnes situations. Si jamais nous obtenons un opérateur de déréférencement null-safe, ce sera encore mieux :) –

Questions connexes