如何使Array。在字符串数组上不区分大小写?


172

Array.Contains在字符串数组上使用该方法。我该如何区分大小写?

Answers:


307
array.Contains("str", StringComparer.OrdinalIgnoreCase);

或者,根据具体情况,您可能更喜欢:

array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);

4
根据msdn.microsoft.com/zh-CN/library/dd465121.aspx,“不变区域性的属性很少,因此无法用于比较。” 在几乎不需要文化特定比较(CurrentCulture)的几乎所有情况下,都应使用Ordinal而不是InvariantCulture
bdukes 2011年

2
@bdukes这太强了。有使用的正当理由InvariantCulture。上面三种选择中的任何一种的使用都取决于具体情况。我不反对您重新排序,但是我删除了“可能不是”评论。答案中已经明确指出,您应该选择在当前情况下最适合您的一种。
Mehrdad Afshari

1
我花了一些时间才意识到Contains是System.Linq中的扩展方法。
Craig Celeste 2014年

LINQ再次挽救了一天。
科比

@MehrdadAfshari在这种情况下,前面的注释完全正确。“包含”只需要检查相等性,这对于“序数”比较而言更为有效。其他“文化”感知比较与字符排序有关,因此仅与排序有关。
user1751825

9

我这边的一些重要注意事项,或者至少将一些分布式信息放在一个位置上-使用StringComparer与上面的技巧有关,例如:

if (array.Contains("str", StringComparer.OrdinalIgnoreCase))
{}
  1. array.Contains() 是LINQ扩展方法,因此仅适用于.NET 3.5或更高版本,需要:
    using System;
    using System.Linq;

  2. 但是:在.NET 2.0 Contains()中,至少可以这样进行简单的方法(不考虑大小写不敏感),使用强制转换:

    if ( ((IList<string>)mydotNet2Array).Contains(“str”) ) {}

    由于Contains()方法是IList接口的一部分,因此它不仅适用于数组,而且适用于列表等。


1

实现一个自定义IEqualityComparer,它考虑了不区分大小写。

此外,检查出。因此,从理论上讲,您要做的就是:

myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))

18
因为直到5分钟前,我还不知道存在StringComparer。:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.