使用StringComparison.OrdinalIgnoreCase忽略Case

时间:2018-02-12 17:11:07

标签: linq c#-4.0 lambda

此代码区分大小写,如何使其不区分大小写?

return HeaderNames.Length == fileLine.Count &&
  HeaderNames
    .Select(headItem => fileLine[Array.IndexOf(HeaderNames, headItem)] == headItem)
    .All(i => i);

感谢您的回答/

2 个答案:

答案 0 :(得分:0)

没有理由将数据索引回数组以获得该位置,因此有Select版本。您可以使用String.Equals并传递StringComparison选项:

return HeaderNames.Length == fileLine.Count &&
       HeaderNames.Select((headItem, i) => fileLine[i].Equals(headItem, StringComparison.OrdinalIgnoreCase)).All(i => i);

答案 1 :(得分:0)

如何使用FindIndex代替IndexOf。 我假设你有array的{​​{1}}

strings

示例

Array.FindIndex(HeaderNames, t => t.IndexOf(headItem, StringComparison.InvariantCultureIgnoreCase) >=0);

<强>输出

  

1

注意:您也可以在上述建议中使用var a = new string[]{"green","red"}; var idx = Array.FindIndex(a, t => t.IndexOf("Red", StringComparison.InvariantCultureIgnoreCase) >=0); Console.WriteLine(idx); 代替string.Equals

t.IndexOf

虽然它将是一个长嵌套t=>string.Equals(t, headItem, StringComparison.InvariantCultureIgnoreCase)

修改

  

如果你想找到确切的字符串,即不希望从«红色»得到« ed »的索引作为数组中存在的项目。使用string.Equals。