He heredado un código en el trabajo que huele muy mal. Espero encontrar la solución más indolora posible.
¿Hay alguna forma de verificar si algún número arbitrario es un elemento válido en una matriz?
Ejemplo: necesito comprobar si existe la matriz [25].
Preferiblemente, preferiría hacer esto sin hacer un foreach () a través de la matriz para encontrar las filas.
¿Hay alguna forma de hacer esto, o estoy atascado con foreach loop?
Respuestas:
Prueba la longitud
int index = 25; if(index < array.Length) { //it exists }
fuente
También puede usar LINQ para lograr eso:
var exists = array.ElementAtOrDefault(index) != null;
fuente
new object[]{ null }.ElementAtOrDefault(index)
volveránull
ya que el elemento en 0 esnull
. UsarElementAtOrDefault
no es una gran solución para verificar que existen índices de matriz , esa verificación de igualdad agregada al final hace que los resultados sean indeterminables.array.Length > index
.¿Qué quiere decir exactamente con "es un elemento válido"? Podrías simplemente hacer:
if (array.Length >= 26)
que le diría si 25 es un índice válido en la matriz o no (asumiendo un límite inferior 0).
Si necesita saber si no es nulo o no, simplemente use:
if (array[25] != null)
(O una combinación de los dos).
Si esto no ayuda, proporcione un significado más preciso de "válido" para su problema.
fuente
Index was outside the bounds of the array
Suponiendo que también desea verificar si el elemento no es nulo
if (array.Length > 25 && array[25] != null) { //it exists }
fuente
&&
enif (array.Length > 25 && array[25] != null)
, si un solo uso&
tirará IndexOutOfRange excepción. 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 }
fuente
Puede usar la longitud de la matriz y ver si su número arbitrario encaja en ese rango. Por ejemplo, si tiene una matriz de tamaño 10, la matriz [25] no es válida porque 25 no es menor que 10.
fuente
Puede utilizar una lista para comprobar la existencia.
List<int> l = new List<int>(); l.Add(45); ... ... if (l.Count == 25) { doStuff(); } int num = 45; if (l.Contains(num)) { doMoreStuff(); }
fuente
array.length
te dirá cuántos elementos hay en una matrizfuente
Puede verificar si el índice es menor que la longitud de la matriz. Esto no comprueba si hay nulos u otros casos extraños en los que se puede asignar un valor al índice pero no se le ha dado uno explícitamente.
fuente
Puede verificar la longitud de la matriz para ver si el elemento 25 es válido en el sentido de estar en la matriz, entonces podría usar
if (array.Length > 25) { if (array[25] != null) { //good } }
para ver si se ha configurado el elemento de la matriz.
fuente
Parece como si estuvieras usando una matriz para almacenar diferentes campos. Este es definitivamente un olor a código. Evitaría usar matrices tanto como sea posible, ya que generalmente no son adecuadas (o necesarias) en código de alto nivel.
Cambiar a un diccionario simple puede ser una opción viable a corto plazo. Como lo haría con una clase de bolsa de propiedad grande. Hay muchas opciones. El problema que tiene ahora es solo un síntoma de un mal diseño, debería buscar solucionar el problema subyacente en lugar de simplemente reparar el mal diseño para que funcione un poco, por ahora.
fuente