2011-03-23 11 views
8

Tengo una matriz de cadenas llamados "Cars"Utilizando C# LINQ para volver primer índice de null/ocurrencia vacía en una matriz

me gustaría obtener el primer índice de la matriz es o bien nulo, o el valor almacenado está vacío. Esto es lo que tengo hasta ahora:

private static string[] Cars; 
Cars = new string[10]; 
var result = Cars.Where(i => i==null || i.Length == 0).First(); 

Pero, ¿cómo puedo obtener el primer índice de esa situación?

Por ejemplo:

Cars[0] = "Acura"; 

entonces el índice debe volver 1 como el próximo lugar disponible en la matriz.

Respuesta

14

Puede utilizar el método Array.FindIndex para este fin.

Busca un elemento que coincide las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la primera aparición en toda la matriz.

Por ejemplo:

int index = Array.FindIndex(Cars, i => i == null || i.Length == 0); 

Para un método de propósito general más que funciona en cualquier IEnumerable<T>, echar un vistazo a: How to get index using LINQ?.

+2

Si estas son cadenas, ¿por qué no utilizar '! String.IsNullOrEmpty (i)' – neontapir

4

Si desea que la forma de LINQ de hacerlo, aquí está:

var nullOrEmptyIndices = 
    Cars 
     .Select((car, index) => new { car, index }) 
     .Where(x => String.IsNullOrEmpty(x.car)) 
     .Select(x => x.index); 

var result = nullOrEmptyIndices.First(); 

Tal vez no tan sucinta como Array.FindIndex, pero funcionará en cualquier lugar de sólo IEnumerable<> matrices. También es composable.

Cuestiones relacionadas