L’index du tableau existe-t-il?

J’ai hérité d’un code au travail qui a une très mauvaise odeur. J’espère trouver la solution la plus indolore possible.

Est-il possible de vérifier si un nombre arbitraire est un élément valide dans un tableau?

Exemple – Je dois vérifier si le tableau [25] existe.

De préférence, je préférerais le faire sans faire un foreach () à travers le tableau pour trouver les lignes.

Y a-t-il un moyen de faire cela ou suis-je coincé avec une boucle foreach?

Tester la longueur

int index = 25; if(index < array.length) { //it exists } 

Vous pouvez utiliser LINQ pour y parvenir également:

 var exists = array.ElementAtOrDefault(index) != null; 

Que voulez-vous dire exactement par “est un élément valide”? Vous pourriez juste faire:

 if (array.Length >= 26) 

ce qui vous dirait si 25 est un index valide dans le tableau ou non (en supposant une limite inférieure à 0).

Si vous avez besoin de savoir si c’est non nul ou non, utilisez simplement:

 if (array[25] != null) 

(ou une combinaison des deux).

Si cela ne vous aide pas, veuillez donner une signification plus précise à “valide” pour votre problème.

En supposant que vous voulez aussi vérifier si l’élément n’est pas nul

 if (array.Length > 25 && array[25] != null) { //it exists } 

Vous pouvez utiliser la longueur du tableau et voir si votre nombre arbitraire correspond à cette plage. Par exemple, si vous avez un tableau de taille 10, le tableau [25] n’est pas valide car 25 n’est pas inférieur à 10.

Vous pouvez plutôt utiliser une liste pour vérifier l’existence.

 List l = new List(); l.Add(45); ... ... if (l.Count == 25) { doStuff(); } int num = 45; if (l.Contains(num)) { doMoreStuff(); } 

array.length vous dira combien d’éléments sont dans un tableau

 // I'd modify this slightly to be more resilient to a bad parameter // it will handle your case and better handle other cases given to it: int index = 25; if (index >= 0 && index < array.Length) { // Array element found } 

Vous pouvez vérifier si l’index est inférieur à la longueur du tableau. Cela ne vérifie pas les valeurs NULL ou d’autres cas impairs où l’index peut se voir atsortingbuer une valeur mais n’en a pas reçu explicitement.

Vous pouvez vérifier la longueur du tableau pour voir si l’article 25 est valide dans le sens où il se trouve dans le tableau, alors vous pouvez utiliser

 if (array.Length > 25) { if (array[25] != null) { //good } } 

pour voir si l’élément de tableau lui-même a été défini.

Cela ressemble beaucoup à l’utilisation d’un tableau pour stocker différents champs. C’est définitivement une odeur de code. J’éviterais d’utiliser les tableaux autant que possible car ils ne sont généralement pas adaptés (ou nécessaires) au code de haut niveau.

Passer à un dictionnaire simple peut être une option réalisable à court terme. Comme le ferait une grande classe de sac de propriété. Il y a beaucoup d’options. Le problème que vous avez maintenant est juste un symptôme de mauvaise conception, vous devriez envisager de résoudre le problème sous-jacent plutôt que de simplement corriger la mauvaise conception pour qu’elle fonctionne un peu, pour le moment.