J'ai une méthode où je correspond aux fichiers XML. Les deux XML ont le même clientfnr. Mais j'essaie d'obtenir toutes les informations de la fois et de le faire correspondre à un XML. Cela fonctionne bien. Mais parfois, le DOC1 a quelques identifiants qui n'existent pas dans DOC2 (NULL). Et c'est ce que j'ai besoin de sauter et de continuer.
xml1: strong> p> xml2: strong> p> ce que j'ai essayé avec c # fort> p> et cela fonctionne très bien. Mais quand je frappe un aucune idée, Comment ignoroir si la clientèle n'existe pas dans DOC2 P> P> clientfnr code> où la valeur n'existe pas dans doc2 code> i obtenez cette erreur p>
3 Réponses :
Que diriez-vous de vérifier si la fonction où la fonction a renvoyé des éléments?
Changement: à: p>
Une autre solution si votre C # -version est suffisamment haut (c'est-à-dire ne pas construire pour une très ancienne version .NET), serait d'utiliser le puis Si vous voulez que ce soit une liste vide lorsque cela se produit, vous pouvez faire
Ceci provoque la création d'une nouvelle liste lorsque le côté gauche est résumer: ?. code> -Oupérateur, qui exécute la fonction lorsque le Le côté gauche n'est pas nul et renvoie null code> si le côté gauche est null code>:
Doc2elements.Où (x => x.tostring (). Indexof (clientfrefnr)> -1) .Firstordefault () ?. Éléments () ?. Tolist (); Code> P> P>
doc2childs code> sera null code> lorsque le firstordefault code> renvoyé null code>. p>.
Doc2elements.Où (x => x.tostring (). Indexof (clientfrefnr)> -1) .Firstordefault () ?. Éléments ()?. Tolist () ?? nouvelle liste null code> p>
a ?? b code> est court pour a == null? B: A code> tandis que a? .b code> est court pour a == null? NULL: A.B CODE> P>
Il y a 2 solutions à votre problème, en fonction de ce que vous souhaitez faire si vous rencontrez une valeur nulle dans l'un de vos fichiers XML
1: P>
var doc2TempResult = doc2Elements.Where(x => x.ToString().IndexOf(ClientRefNr) > -1).FirstOrDefault();
// Instead of continue, you could also break, or do whatever you want/ need
if (doc2TempResult is null || !(doc2TempResult.Elements() is IEnumerable<XElement> doc2Elements))
continue;
var doc2Childs = doc2Elements.ToList()
C'est parce que vous utilisez
FirstODEDFault () CODE>, qui retourne null si aucun élément n'a été trouvé. Ensuite, vous appelez directement.elements () code> sur ce qui pourrait potentiellement êtrenull code>. Vous pouvez soit diviser, de sorte que vous appelezfirstordfault code>, attribuez ce résultat à une variable, puis vérifiez s'il est null ou non. Ou, si rien d'autre s'en soucie si c'est NULL, utilisez l'opérateur null-conditionnelMerci :) ça m'a aidé
Pas de problème, je saisie actuellement une réponse qui passe plus détaillée expliquant les deux solutions