【问题标题】:Using StringComparison.OrdinalIgnoreCase to ignore Case使用 StringComparison.OrdinalIgnoreCase 忽略大小写
【发布时间】:2018-02-12 17:11:07
【问题描述】:

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

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

感谢您的回答/

【问题讨论】:

  • 你的问题很不清楚。请更好地解释你的问题。
  • 我正在寻找的内容是使用 ToUpper 或 Lowoer 或不区分大小写。
  • 这段代码区分大小写,如何让它不区分大小写?
  • HeaderNames中的条目是什么情况?

标签: linq c#-4.0 lambda


【解决方案1】:

使用FindIndex 代替IndexOf 怎么样。 我假设你有arraystrings

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

示例

var a = new string[]{"green","red"};

var idx = Array.FindIndex(a, t => t.IndexOf("Red", StringComparison.InvariantCultureIgnoreCase) >=0);

Console.WriteLine(idx);

输出

1

注意:您也可以在上述建议中使用string.Equals 而不是t.IndexOf

t=>string.Equals(t, headItem, StringComparison.InvariantCultureIgnoreCase)

这将是一个长嵌套的LINQ

编辑

如果您想找到确切的字符串,即不想从 «Red» 中获取 «ed» 的索引作为存在于数组中的项目。使用字符串。等于。

【讨论】:

  • t.IndexOf("ed",... 将是 >= 0 因此“red”将匹配“ed”,这不等同于忽略大小写的 ==
  • 对于该字符串,应该使用Equals。建议在回答@NetMage
【解决方案2】:

没有理由重新索引到数组中来获取位置,有一个 Select 的版本可以做到这一点。您可以使用String.Equals 并传递StringComparison 选项:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多