If (Tableau.Longueur == 0)

Si un tableau est vide, il semble que vous ne puissiez pas vérifier sa longueur en utilisant ".longueur". Quelle est la meilleure façon de vérifier si un tableau est vide?

50
demandé sur sooprise 2010-07-09 18:06:53

12 réponses

Vous pouvez absolument vérifier la longueur d'un tableau vide. Cependant, si vous essayez de le faire sur une référence nulle, vous obtiendrez une exception. Je soupçonne que c'est ce que vous rencontrez. Vous pouvez faire face aux deux si:

if (array == null || array.Length == 0)

Si ce n'est pas la cause, veuillez donner un programme court mais complet démontrant le problème. Si était la cause, cela vaut la peine de prendre un moment pour vous assurer de comprendre les références nulles par rapport aux collections/chaînes/autres "vides".

128
répondu Jon Skeet 2010-07-09 14:08:08

Ouais, pour la sécurité, je ferais probablement:

if(array == null || array.Length == 0)
13
répondu kemiller2002 2010-07-09 14:08:19

Vous pouvez utiliser .Length == 0 si la longueur est vide et le tableau existe, mais êtes-vous sûr que c'est pas nulle?

4
répondu Brian R. Bondy 2010-07-09 14:08:29

Vous pouvez utiliser

if (array == null || array.Length == 0)

Ou

if (!(array != null && array.Length >= 0))

REMARQUE!!!!! pour s'assurer que c# implémentera correctement le court-circuit; vous devez comparer cet objet avec NULL avant d'aller à la comparaison des enfants de l'objet.

3
répondu Waleed A.K. 2010-07-09 17:43:30

C'est la meilleure façon. Veuillez noter que Array est un objet dans NET, vous devez donc vérifier la valeur null avant.

2
répondu Arseny 2010-07-09 14:09:15

Comme d'autres l'ont déjà suggéré, il est probable que vous obteniez un NullReferenceException qui peut être évité en vérifiant d'abord si la référence est null. Cependant, vous devez vous demander si ce contrôle est réellement justifié. Le feriez-vous parce que la référence pourrait vraiment être null et qu'elle est {[1] } a une signification particulière dans votre code? Ou feriez-vous pour couvrir un bug? La nature de la question me porte à croire que ce serait la dernière. Dans ce cas vous devez vraiment examinez le code en profondeur et découvrez pourquoi cette référence n'a pas été initialisée correctement en premier lieu.

2
répondu Brian Gideon 2010-07-09 14:17:26

Jon Skeet a répondu correctement. Rappelez-vous simplement que l'ordre du test dans le "SI" est important. Vérifiez la valeur null avant la longueur. Je préfère aussi mettre le nul sur le côté gauche de l'égalité...juste une habitude que J'ai eue de Java qui a rendu le code plus efficace et rapide... Je ne pense pas que ce soit important dans beaucoup d'applications aujourd'hui, mais c'est une bonne pratique.

If(null == array || tableau.Longueur = = 0)

2
répondu Sylvain Perron 2010-07-09 14:21:53

Votre test suggéré est correct, tant que le tableau est initialisé...

Martin.

1
répondu Martin Milan 2010-07-09 14:10:37

If (tableau.Longueur > 0)

1
répondu Wills 2010-07-09 16:14:53

Vérifiez d'abord si le tableau est null afin d'éviter une exception de pointeur null

Logique dans n'importe quelle langue: si le tableau est null ou est vide :do ....

1
répondu Saher Ahwal 2010-07-09 18:08:00

Voulez-vous dire vide ou nul, deux choses différentes,

Si le tableau est instancié mais vide, alors length est correct, s'il n'a pas été instancié alors test vs null

0
répondu Pharabus 2010-07-09 14:09:21

Si array est null, en essayant de derefrence array.Length va lancer une NullReferenceException. Si votre code considère null comme une valeur invalide pour array, vous devez le rejeter et blâmer l'appelant. Un tel modèle est de lancer ArgumentNullException:

void MyMethod(string[] array)
{
    if (array == null) throw new ArgumentNullException(nameof(array));

    if (array.Length > 0)
    {
        // Do something with array…
    }
}

Si vous voulez accepter un tableau null comme indication de ne pas faire quelque chose ou comme paramètre facultatif, vous pouvez simplement ne pas y accéder s'il est null:

void MyMethod(string[] array)
{
    if (array != null)
    {
        // Do something with array here…
    }
}

Si vous voulez éviter de toucher array quand il est null ou a une longueur nulle, alors vous pouvez vérifier les deux en même temps avec l'opérateur de coalescence null C#-6.

void MyMethod(string[] array)
{
    if (array?.Length > 0)
    {
        // Do something with array…
    }
}

Vérification De Longueur Superflue

Il semble étrange que vous traitiez le tableau vide comme un cas particulier. Dans de nombreux cas, si vous, par exemple, faites une boucle sur le tableau de toute façon, il n'est pas nécessaire de traiter le tableau vide comme un cas particulier. foreach (var elem in array) {«body»} sera tout simplement jamais exécuter «body» lorsque array.Length est 0. Si vous traitez array == null || array.Length == 0 spécialement pour, par exemple, améliorer les performances, vous pouvez envisager laisser un commentaire pour la postérité. Sinon, la vérification de Length == 0 semble superflue.

Un Code superflu rend la compréhension d'un programme plus difficile car les personnes qui lisent le code supposent probablement que chaque ligne est nécessaire pour résoudre un problème ou atteindre l'exactitude. Si vous incluez du code inutile, les lecteurs vont passer une éternité à essayer de comprendre pourquoi cette ligne est ou était nécessaire avant de la supprimer; -).

0
répondu binki 2017-06-27 21:52:25