10
votes

LINQ à XML NULL Vérification des attributs

var books = from book in booksXml.Descendants("book")
                        let Name = book.Attribute("name") ?? new XAttribute("name", string.Empty)
                        let Price = book.Attribute("price") ?? new XAttribute("price", 0)
                        let Special = book.Attribute("special") ?? new XAttribute("special", string.Empty)
                        select new
                                   {
                                       Name = Name.Value,
                                       Price = Convert.ToInt32(Price.Value),
                                       Special = Special.Value
                                   };

0 commentaires

3 Réponses :


4
votes

Que diriez-nous d'utiliser une méthode d'extension pour encapsuler les cas d'attribut manquant: xxx

Notez que cela ne fonctionnera que si t est un type à quelle chaîne sait Convertir via iconvertible. Si vous vouliez prendre en charge des cas de conversion plus généraux, vous devrez peut-être rechercher un typeconverter. Cela lancera une exception si le type ne parvient pas à convertir. Si vous souhaitez que ces cas renvoient également la valeur par défaut, vous devez effectuer une manipulation d'erreur supplémentaire.


1 commentaires

J'ai utilisé une variante sur celle-ci, mais utilisée xattribute attribut (cet élément xelement, nom xname, tfulvalue) . S'il échoue, créez un neuf xattribute (nom, défaitValue); . Alors la surcharge est là à côté de l'original



11
votes

Vous pouvez lancer l'attribut à une chaîne . S'il est absent, vous obtiendrez null et le code suivant devrait vérifier pour null , sinon elle renvoie la valeur directement.

Essayez cela à la place: < Pré> xxx


1 commentaires

C'est génial! Je l'aime. Merci.



1
votes

in c # 6.0 Vous pouvez utiliser l'opérateur monadique null-conditionnel ?. Après l'application dans votre exemple, cela ressemblerait à ceci: xxx

Vous pouvez lire plus ici dans une partie intitulée Opérateurs null-conditionnels.


0 commentaires