8
votes

Comment gérer NullReferenceExceptionException dans un forach?

foreach (string s in myField.getChilds() ?? new ArrayList(1)) {
        if (s == null)
            //handle null
        else
            //handle normal value 
    }

1 commentaires

Je ne comprends pas votre commentaire concernant l'opérateur coalescent NULL: "Cela ne fonctionne pas, le programme ne fait que sauter à la fin de la Foreach, mais je veux que cela pénètre à la place de la Foreach!". C'est possible parce que vous ne donnez pas de chaîne qu'il ne fait que sauter. Vous devez lui donner une valeur qu'il peut attribuer à s .


3 Réponses :


3
votes
foreach (string s in myField.getChilds() ?? Enumerable.Empty<string>())
{

}

7 commentaires

Comme je l'ai dit, je ne peux pas le supporter à l'extérieur, cela doit être fait dans le forach. Sinon, je l'aurais fait de cette façon: p je suis noob mais pas stupide lol. Quoi qu'il en soit j'ai essayé votre suggestion, mais je devais ajouter une fonte depuis que getchilds () renvoie une arraylist. Donc je l'ai modifié comme ça: String S dans (string []) Source.getchilds (). Toarray () ?? Énumérable () mais encore une fois, nullreferenceException :(


@ Raz3R, ArrayList ??? S'il vous plaît ne faites pas. Utilisez des collections fortement typées. Vous êtes également sûr que ce n'est pas la variable myfield NULL?


On dirait que je suis un idiot à la place parce que j'essaie d'appeler la méthode Toarray () sur un objet Null. De toute façon, je suis NullReferenceException de toute façon XD à côté de cela, je peux essayer d'essayer avec une collection, mais si je mettez en place une interface, je dois remplacer tous les comptes, Getenumerator, etc. Je me trompe? Quel type suggérez-vous? Myfield n'est absolument pas null parce que je l'utilise avant et j'ai débogué l'application, ne vous inquiétez pas.


@ Raz3R: Vous devriez vraiment Expliquez pourquoi vous ne pouvez pas "gérer cela en dehors de la pourbeach" - c'est une réponse naturelle, et une restriction très non naturelle .


Il considère la structure du programme. Je travaille sur un logiciel qui crée des pare-feu Linux et que ceux-ci sont censés construire des règles multibjecteurs. Il est vraiment difficile d'expliquer pourquoi je dois le faire de cette façon, croyez-moi.


Il n'a aucun sens que vous devriez gérer des trucs à l'intérieur d'une boucle si la collection que vous bouclez est vide ou null. Il n'y a rien à traiter


Peut-être parce que Null signifie quelque chose pour moi? De cette façon, j'ai utilisé seulement quelques lignes de code et j'ai atteint mon objectif. Fondamentalement, je suis en boucle à travers une arrayliste de Myfield. Myfield a une autre arrayliste à l'intérieur qui signifie que je suis un objet multiple. J'ai besoin de boucler à travers tous les myfield, mais si l'un d'entre eux a une arrayliste qui n'est pas null, je dois aussi boucler à l'aide de lui parce que cela signifie que l'objet a été changé et que c'est maintenant ce qui compte vraiment est la arraylist à l'intérieur et non à Myfield. Je ne sais pas comment expliquer cela en quelques mots, cela vous obligera à expliquer le but de tout le projet.



11
votes

Un moyen de faire cela (mais pas le meilleur moyen) est: xxx

ou xxx

la raison nouveau ArrayList (1) ne fonctionne pas est qu'il crée une liste qui a la capacité la pour tenir 1 élément, mais reste vide. Cependant, nouvelle chaîne [] {null} crée une matrice de chaîne avec un seul élément qui est juste null, ce que vous ressemblez à vouloir.


4 commentaires

Je ne vois aucune indication que l'OP veut réellement aller dans la boucle si la valeur de retour est null ... J'ai supposé qu'il veut traiter Null de la même manière qu'une collection vide.


Jon: Quand OP dit "Le programme saute juste à la fin de la Forache, mais je veux que cela entre à la place!" Je prends cela comme une indication qu'il souhaite qu'une collection null soit traitée comme une collection d'un élément contenant NULL.


Oups, tu es absolument raison. N'avait pas vu ça. +1, et supprimer ma réponse :)


Ça a marché! J'aurais dû penser à cela, merci beaucoup, vous tous. Désolé si je suis noob :(



2
votes

Si c'est le myfield.getchilds () qui peut contenir NULL

que P>

foreach (string s in myField.getChilds()) {
if (string.IsNullOrEmpty(s))
    //handle null
else
    //handle normal value 


0 commentaires