Liste Comte vs Liste condition null, modifier les résultats
Je vais avoir un programme qui serait d'abord parcourir le Fichier de données, puis de les convertir au format JSON () les données d'un Objet. Objet dépend du format de Fichier que je suis en train d'accéder aux données. C'est à peu près sans rapport avec à la question que je vais poser.
Quand j'ai terminé le projet, et j'étais prêt à les envoyer à mes amis, j'ai trouvé qu'il y avait une chose que je ne comprends pas au sujet de la List<>
s de C#.
Voici le code que j'utilise:
//File is not empty!
string file = File.ReadAllText(new MainWindow().getFileName("events"));
List<Event> events = JsonConvert.DeserializeObject<List<Event>>(file);
Après cela, je suis en train de remplir le ListView
par chaque événement que je vais avoir, ou je suis en train de remplir un TextBlock
avec un texte disant, il n'y a aucun cas de créer un maintenant.
Je suis en utilisant cette condition.
if(events != null) {
//goes well
} else {
//populate the code text view
}
Dans ce code, le bloc else ne pas se déclencher. Si il y a des événements, il remplit la liste sinon ça ne saute le textView code de mise à jour.
Mais, si j'utilise ce code au lieu de cela,
if(events.Count != 0) {
//listview code..
} else {
//populate text view
}
À l'aide de cette manière, je peux remplir le textView et je vois le message d'erreur dans la Page.
J'ai ajouté le code de l'image, et l'exemple pour que. J'espère que quelqu'un peut me dire la différence
(List.Count == 0) || (List == null)
/* irrelevant piece of code, I'm trying to ask, should I use
* List Count == 0 OR List is equal to null */
- tu veux dire que la différence de certains de la liste
List<SomeType> list;
entre les deux conditionslist.Count == 0
etlist == null
, ou je me trompe? Parce que la question des états de la capitalisation desList
dans des conditions tout à la fin, ce qui est un peu déroutant.
Vous devez vous connecter pour publier un commentaire.
Pour certains variable de liste
il peut arriver que la variable
list
pourraient ne pas être initialisé correctement et qu'aucun objet n'est mis en place. Dans de tels cas, la valeur de la variable estnull
. Silist == null
évalue àtrue
etlist.Count
jette unNullReferenceException
Sur l'autre main, si une liste a pu être obtenu. Ensuite, vous serez en mesure d'appeler
Count
sur la liste qui indique le nombre d'éléments dans cette liste. Silist == null
évalue àfalse
etlist.Count == 0
évalue àtrue
si la liste ne contient pas les éléments etfalse
si elle contient au moins un des éléments.Pour être sur le côté sécuritaire (pas seulement pour la programmation de paranoïaques) il est bon de vérifier si une variable peut être null ou pas. Par cela, je veux dire vérifiez la documentation de l'API que vous êtes l'obtention de l'objet.
Si vous le connaissez peut-être, éventuellement, null, vous aurez besoin pour remédier à cette situation en vérifiant
list == null
premier. Si vous ne savez pas, vous devriez probablement vérifiernull
. Je suggère de vérifier pournull
et si oui, - d'attribuer une liste vide à votre liste.Bien mettre l'initialisation en une autre méthode qui est seulement dédié à récupérer votre liste. Si de toute façon il échoue, il renvoie une liste vide. De cette façon, vous pouvez gérer tous le code suivant en cochant une seule condition. La condition si la
list.Count == 0
.Espère que cette aide
La la documentation ne dit rien sur la valeur de retour de
JsonConvert.DeserializeObject
.Mais il semble que
List<Event> events = JsonConvert.DeserializeObject<List<Event>>(file);
ne définit jamais des événements de null, c'est pourquoi votre coden'est pas ce qu'il est censé faire.
Mais c'(
JsonConvert
) peut renvoyer une liste vide. C'est pourquoi ces code fait ce qu'il est censé accomplir:parce que dans le cas de l'échec de l'analyse
JsonConvert.DeserializeObject
renvoie la Liste vide.Bien,
(List.Count == 0) || (List == null)
devrait être écrit comme(List == null) || (List .Count == 0)
parce que si la liste en quelque sorte, devenir nulle, vous avez un imprévuNulReferenceException
. Pour plus de détails, lire L'ordre d'exécution des conditions en C# Si la déclarationIl est possible que le comportement de
JsonConvert
pourrait changer, de sorte qu'il serait préférable d'utiliser