visual net index findindex asp c# linq indexof

c# - net - LINQ indexOf una entrada particular



list elements c# (4)

La List derecha tiene IndexOf (), simplemente declararlo como ILIst<string> lugar de string[]

public static IList<string> HeaderNamesWbs = new List<string> { WBS_NUMBER, BOE_TITLE, SOW_DESCRIPTION, HARRIS_WIN_THEME, COST_BOGEY }; int index = HeaderNamesWbs.IndexOf(WBS_NUMBER);

MSDN: Lista (De T) .IndexOf Método (T)

Tengo una aplicación web MVC3 C # .Net. Tengo la siguiente cadena de cadenas.

public static string[] HeaderNamesWbs = new[] { WBS_NUMBER, BOE_TITLE, SOW_DESCRIPTION, HARRIS_WIN_THEME, COST_BOGEY };

Quiero encontrar el índice de una entrada dada cuando estoy en otro bucle. Pensé que la lista tendría un IndexOf. No puedo encontrarlo ¿Algunas ideas?


Llego tarde al hilo aquí. Pero quería compartir mi solución a esto. Jon es increíble, pero prefiero las lambdas simples para todo.

Puedes extender LINQ para obtener lo que quieras. Es bastante simple de hacer Esto te permitirá usar la sintaxis como:

// Gets the index of the customer with the Id of 16. var index = Customers.IndexOf(cust => cust.Id == 16);

Es probable que esto no sea parte de LINQ por defecto porque requiere enumeración. No es solo otro selector / predicado diferido.

Además, tenga en cuenta que esto solo devuelve el primer índice. Si desea índices (plural), debe devolver un IEnumerable<int> y yeild return index dentro del método. Y por supuesto no vuelvas -1. Eso sería útil cuando no está filtrando por una clave principal.

public static int IndexOf<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { var index = 0; foreach (var item in source) { if (predicate.Invoke(item)) { return index; } index++; } return -1; }


Pues puedes usar Array.IndexOf :

int index = Array.IndexOf(HeaderNamesWbs, someValue);

O simplemente declare HeaderNamesWbs como IList<string> lugar, que aún puede ser una matriz si desea:

public static IList<string> HeaderNamesWbs = new[] { ... };

Tenga en cuenta que le desalentaría que exponga una matriz como public static , incluso public static readonly . Debes considerar ReadOnlyCollection :

public static readonly ReadOnlyCollection<string> HeaderNamesWbs = new List<string> { ... }.AsReadOnly();

Si alguna vez quieres esto para IEnumerable<T> , puedes usar:

var indexOf = collection.Select((value, index) => new { value, index }) .Where(pair => pair.value == targetValue) .Select(pair => pair.index + 1) .FirstOrDefault() - 1;

(Los +1 y -1 son para que devuelva -1 para "faltantes" en lugar de 0.)