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.
Existe-t-il un moyen de vérifier si un nombre arbitraire est un élément valide dans un tableau?
Exemple - J'ai besoin de vérifier si le tableau [25] existe.
De préférence, je préférerais faire cela sans faire un foreach () à travers le tableau pour trouver les lignes.
Existe-t-il un moyen de le faire ou suis-je coincé avec la boucle foreach?
Réponses:
Testez la longueur
int index = 25; if(index < array.Length) { //it exists }
la source
Vous pouvez également utiliser LINQ pour y parvenir:
var exists = array.ElementAtOrDefault(index) != null;
la source
new object[]{ null }.ElementAtOrDefault(index)
retourneranull
puisque l'élément à 0 estnull
. L'utilisationElementAtOrDefault
n'est pas une excellente solution pour vérifier l' existence d' indices de tableau , cette vérification d'égalité ajoutée à la fin rend les résultats indéterminables.array.Length > index
.Qu'entendez-vous exactement par «est un élément valide»? Vous pouvez simplement faire:
if (array.Length >= 26)
qui vous dirait si 25 est un index valide dans le tableau ou non (en supposant une limite inférieure de 0).
Si vous avez besoin de savoir s'il 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 de «valide» pour votre problème.
la source
Index was outside the bounds of the array
En supposant que vous vouliez également vérifier si l'élément n'est pas nul
if (array.Length > 25 && array[25] != null) { //it exists }
la source
&&
dansif (array.Length > 25 && array[25] != null)
, si l'utilisation de single&
lancera une exception IndexOutOfRange. MSDN .// 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 }
la source
Vous pouvez utiliser la longueur du tableau et voir si votre nombre arbitraire s'inscrit dans 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.
la source
Vous pouvez plutôt utiliser une liste, afin de pouvoir vérifier l'existence.
List<int> l = new List<int>(); l.Add(45); ... ... if (l.Count == 25) { doStuff(); } int num = 45; if (l.Contains(num)) { doMoreStuff(); }
la source
array.length
vous dira combien d'éléments sont dans un tableaula source
Vous pouvez vérifier si l'index est inférieur à la longueur du tableau. Cela ne vérifie pas les valeurs nulles ou d'autres cas étranges où l'index peut se voir attribuer une valeur mais ne l'a pas été explicitement.
la source
Vous pouvez vérifier la longueur du tableau pour voir si l'élément 25 est valide dans le sens d'être 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.
la source
Cela ressemble beaucoup à vous utilisez un tableau pour stocker différents champs. C'est définitivement une odeur de code. J'éviterais autant que possible d'utiliser des tableaux car ils ne sont généralement pas adaptés (ou nécessaires) dans le code de haut niveau.
Le passage à un dictionnaire simple peut être une option viable à court terme. Comme le ferait une grande classe de sac de propriété. Il existe de nombreuses options. Le problème que vous avez maintenant n'est qu'un symptôme d'une mauvaise conception, vous devriez chercher à résoudre le problème sous-jacent plutôt que de simplement corriger la mauvaise conception afin que cela fonctionne un peu, en quelque sorte, pour le moment.
la source