1) se si desidera effettuare la ricerca solo una volta e si desidera mantenere matrice di origine, è possibile utilizzare questo:
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) se si cercherà più volte sarà meglio usare questo:
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 risposta di cui sopra non è corretto:
string array[] = {"hello", "hi", "bye" , "welcome" , "hell"}
Int Indexofary = Array.FindIndex(array, t => t.IndexOf("hell", StringComparison.InvariantCultureIgnoreCase) >=0);
non funziona affatto, perché cerca non la stringa, ma sottostringa.
Algoritmo itera le parole in array, quando 1a parola "ciao" eseguita, l'algoritmo prova a trovare l'indice di "inferno" e questo indice è 1. 1 è> quindi 0 e l'algoritmo sarà terminato senza passare ad altre parole.
Se non si desidera cercare sottostringhe ma si desidera cercare le stringhe, è necessario correggere l'algoritmo. Questo algoritmo può essere risolto aggiungendo il controllo che la sottostringa parte dal 1 ° char t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) == 0
e la lunghezza delle parole è uguale a str.Length == t.Length
. Fisso:
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);
}
notare che questa ricerca di risposta per un _substring_ della stringa di riferimento in ciascun elemento della matrice di input elencate di 'Array.FindIndex()', dovuto all'utilizzo di 'System.String.IndexOf()'. Per abbinare completamente gli elementi, utilizzare l'analogo sovraccarico'System.String.Equals() ', come mostrato nelle altre risposte. – mklement0