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 };
3 Réponses :
Que diriez-nous d'utiliser une méthode d'extension pour encapsuler les cas d'attribut manquant: Notez que cela ne fonctionnera que si t code> 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. P> P>
J'ai utilisé une variante sur celle-ci, mais utilisée xattribute attribut
neuf xattribute (nom, défaitValue); code>. Alors la surcharge est là à côté de l'original
Vous pouvez lancer l'attribut à une chaîne code> code>. S'il est absent, vous obtiendrez Essayez cela à la place: P> < Pré> xxx pré> p> null code> et le code suivant devrait vérifier pour
null code>, sinon elle renvoie la valeur directement.
C'est génial! Je l'aime. Merci.
in c # 6.0 Vous pouvez utiliser l'opérateur monadique null-conditionnel Vous pouvez lire plus ici dans une partie intitulée Opérateurs null-conditionnels. P> p> ?. code>
Après l'application dans votre exemple, cela ressemblerait à ceci: