如何向Array.IndexOf添加不区分大小写的选项

27 c# asp.net

我有一个字符串

string str="hello";
Run Code Online (Sandbox Code Playgroud)

这是我的阵列

string[] myarr = new string[] {"good","Hello", "this" , "new"};
Run Code Online (Sandbox Code Playgroud)

我需要从数组中找到"hello"的索引(不使用循环)

所以我用过

int index = Array.IndexOf(myarr, str);
Run Code Online (Sandbox Code Playgroud)

这返回-1,但我期待结果为1.

我甚至试过StringComparer.OrdinalIgnoreCase但没有用.

希望有人能提供帮助.谢谢.

小智 35

意识到 !!标记的答案可能有一些问题,比如

string array[] = {"hello", "hi", "bye" , "welcome" , "hell"}
Run Code Online (Sandbox Code Playgroud)

如果您使用与答案中描述的相同方法来查找单词"hell"的索引

Int Indexofary = Array.FindIndex(array, t => t.IndexOf("hell", StringComparison.InvariantCultureIgnoreCase) >=0);
Run Code Online (Sandbox Code Playgroud)

你会得到结果Indexofary = 0而不是4.

而不是那种用途

Array.FindIndex(array, t => t.Equals("hell", StringComparison.InvariantCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

得到正确的结果.

Rrgards比特

  • 为什么`InvariantCultureIgnoreCase`而不是`OrdinalIgnoreCase`? (10认同)

Sha*_*ran 9

既然你正在寻找索引.试试这种方式.

Array.FindIndex(myarr, t => t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) >=0);
Run Code Online (Sandbox Code Playgroud)

  • 注意,由于使用了System.String.IndexOf(),此答案将在由array.FindIndex()枚举的输入数组的每个元素中搜索参考字符串的_substring_。要完全匹配元素,请使用类似System.String.Equals()的重载,如其他答案所示。 (4认同)

doo*_*gle 6

Array.IndexOf 调用区分大小写的默认“Equals”方法。尝试这个:

Array.FindIndex(myarr, t => t.Equals(str, StringComparison.InvariantCultureIgnoreCase))
Run Code Online (Sandbox Code Playgroud)