1) si desea buscar sólo una vez y desea mantener matriz de origen, puede utilizar esto:
public static void example1()
{
string[] myarr = { "good", "Hello", "this", "new" };
var str = "new";
var res= Array.FindIndex(myarr, x=>string.Equals(x, str, StringComparison.InvariantCultureIgnoreCase));
}
2) si va a buscar muchas veces será mejor utilizar esto:
public static void example1()
{
string[] myarr = {"good", "Hello", "this", "new"};
var str = "new";
var res = Array.IndexOf(Array.ConvertAll(myarr, ToStringlowerCase), str.ToLowerInvariant());
}
3) la respuesta anterior es incorrecta:
string array[] = {"hello", "hi", "bye" , "welcome" , "hell"}
Int Indexofary = Array.FindIndex(array, t => t.IndexOf("hell", StringComparison.InvariantCultureIgnoreCase) >=0);
no funcionará en absoluto, ya que no busca en la cadena, pero subcadena.
Algoritmo itera las palabras en matriz, cuando la 1ra palabra "hello" es tomada, el algoritmo intenta encontrar el índice de 'infierno' y este índice es 1. 1 es> luego 0 y el algoritmo terminará sin ir a otras palabras.
Si no desea buscar subcadenas pero desea buscar cadenas, algorythm debe corregirse. Este algoritmo puede corregirse agregando la comprobación de que la subcadena se inicia desde el 1er carácter t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) == 0
y la longitud de las palabras es igual a str.Length == t.Length
. Fijo:
public static int example3()
{
string[] myarr = { "hHello", "hi", "bye", "welcome", "hell" };
var str = "hell";
return Array.FindIndex(myarr, t => t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) == 0 && str.Length == t.Length);
}
en cuenta que esta búsquedas de respuesta para una _substring_ de la cadena de referencia en cada elemento de la matriz de entrada enumerado por 'Array.FindIndex()', debido al uso de 'System.String.IndexOf()'. Para hacer coincidir los elementos en su totalidad, use la sobrecarga análoga 'System.String.Equals()', como se muestra en las otras respuestas. – mklement0