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

Mik*_*ole 160 .net

Array.Contains在字符串数组上使用该方法.如何使该案例不敏感?

Meh*_*ari 291

array.Contains("str", StringComparer.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

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

array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

  • 根据http://msdn.microsoft.com/en-us/library/dd465121.aspx,"不变文化具有很少的属性,使其可用于比较." 在几乎所有你不想进行文化特定比较(`CurrentCulture`)的情况下,你应该使用`Ordinal`而不是`InvariantCulture`. (3认同)
  • @bdukes这个声明太强了.有正当理由使用`InvariantCulture`.使用上述三种选择中的任何一种取决于具体情况.我不反对你的重新排序,但我正在删除"可能不是"的评论.已经在答案中明确指出,您应该选择适合您的当前情况. (2认同)
  • 我花了一些时间才意识到 Contains 是 System.Linq 中的扩展方法。 (2认同)

Phi*_*ilm 7

来自我方的一些重要说明,或至少在一个地方放置一些分布式信息 - 关于上面的提示,使用如下的StringComparer:

if (array.Contains("str", StringComparer.OrdinalIgnoreCase))
{}
Run Code Online (Sandbox Code Playgroud)
  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接口的一部分,因此它不仅适用于数组,还适用于列表等.