【问题标题】:C# Case insensitive string comparison [duplicate]C#不区分大小写的字符串比较[重复]
【发布时间】:2014-06-20 07:17:42
【问题描述】:

我有一个包含几个字符串(名称)的列表。对于这个例子。 它将保持:

  • 测试1
  • 测试2
  • 测试3

我正在尝试检查该列表是否包含其中之一。而我现在正在这样做:

if (list.Contains(test2))
{

}

但我需要它不区分大小写。但我该怎么做呢?在 if 语句中。

【问题讨论】:

  • this other answer。使用StringComparison.OrdinalIgnoreCase
  • 对于简单的非重音字符串,例如英语,简单地追加 Gigi 建议的内容:list.Contains("test2", StringComparer.OrdinalIgnoreCase)

标签: c# list


【解决方案1】:

将您的list 小写......并且

if (list.Contains(test2.ToLower()))
{

}

【讨论】:

  • 太糟糕了,他为什么要把他的列表变成小写?
  • 数据更改以检查条件?听起来不错。
  • 在特定文化比较情况下会失败,请参阅Turkey Test
【解决方案2】:

IndexOf 有一个不区分大小写搜索的参数

culture.CompareInfo.IndexOf(toSearch, word, CompareOptions.IgnoreCase) 

其中文化是描述文本所用语言的 CultureInfo 实例。

您可以遍历列表并查看每个列表条目是否与搜索匹配。

【讨论】:

  • CompareInfo.IndexOf 不带列表,它在另一个字符串中搜索子字符串。
  • @hvd。我知道。我通过说明您已经遍历列表进行比较来使我的答案更清楚
  • 但是你根本不应该检查子字符串,只检查完整的匹配项。
【解决方案3】:

Contains 方法有一个接受IEqualityComparer 的重载。您可以通过以下方式给它一个:

 if (list.Contains(test2, StringComparer.OrdinalIgnoreCase))  
 {  
     // do something  
 }

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2013-07-22
    • 2014-07-19
    • 2011-06-22
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多