c# - org - mapwindows 5
¿Existe el Index of Array? (11)
Heredé un código en el trabajo que tiene un mal olor. Espero encontrar la solución más indolora posible.
¿Hay alguna manera de verificar si algún número arbitrario es un elemento válido en una matriz?
Ejemplo: necesito verificar si existe la matriz [25].
Preferentemente, preferiría hacer esto sin hacer un foreach () a través de la matriz para encontrar las filas.
¿Hay alguna manera de hacer esto, o estoy atrapado con foreach loop?
¿A qué te refieres con "es un elemento válido"? Usted podría simplemente hacer:
if (array.Length >= 26)
que le diría si 25 es un índice válido en la matriz o no (suponiendo un límite inferior de 0).
Si necesita saber si es no nulo o no, solo use:
if (array[25] != null)
(O una combinación de los dos).
Si esto no ayuda, por favor, brinde un significado más preciso de "válido" para su problema.
Prueba la longitud
int index = 25;
if(index < array.length)
{
//it exists
}
Puede usar una Lista, para que pueda verificar la existencia.
List<int> l = new List<int>();
l.Add(45);
...
...
if (l.Count == 25) {
doStuff();
}
int num = 45;
if (l.Contains(num)) {
doMoreStuff();
}
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 el elemento de la matriz se ha establecido.
Puede verificar si el índice es menor que la longitud de la matriz. Esto no verifica nulos u otros casos impares en los que al índice se le puede asignar un valor pero no se le ha dado uno explícitamente.
Puedes usar LINQ para lograr eso también:
var exists = array.ElementAtOrDefault(index) != null;
Puedes usar la longitud de la matriz y ver si tu número arbitrario se ajusta a ese rango. Por ejemplo, si tiene una matriz de tamaño 10, la matriz [25] no es válida porque 25 no es inferior a 10.
Suena como si estuvieras usando una matriz para almacenar diferentes campos. Esto es definitivamente un olor a código. Evitaría usar matrices tanto como sea posible, ya que generalmente no son adecuadas (o necesarias) en el código de alto nivel.
Cambiar a un diccionario simple puede ser una opción viable a corto plazo. Al igual que con una gran clase de bolsa de propiedades. Hay muchas opciones. El problema que tienes ahora es solo un síntoma de un mal diseño, deberías buscar solucionar el problema subyacente en lugar de simplemente reparar el mal diseño, por lo que funciona, por lo general funciona, por ahora.
Suponiendo que también quiere comprobar si el artículo no es nulo
if (array.Length > 25 && array[25] != null)
{
//it exists
}
array.length
te dirá cuántos elementos hay en una matriz
// 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
}