如何进行不区分大小写的字符串比较?

时间:2010-06-25 22:56:58

标签: c# string-comparison case-insensitive

如何使下面的行不区分大小写?

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);

我今天早些时候给了我一些建议,建议我使用:

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));

问题是我无法让这个工作,我已经尝试了下面这一行,这个编译但返回错误的结果,它返回注册用户作为注册的未注册用户和未注册用户。

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], 
                                 StringComparison.OrdinalIgnoreCase)));

有人可以指出问题吗?

9 个答案:

答案 0 :(得分:367)

这不是.NET框架(4& +)中检查相等性的最佳实践

String.Compare(x.Username, (string)drUser["Username"], 
                  StringComparison.OrdinalIgnoreCase) == 0

请改用以下内容

String.Equals(x.Username, (string)drUser["Username"], 
                   StringComparison.OrdinalIgnoreCase) 

MSDN recommends:

  
      
  • 使用String.Equals方法的重载来测试两个字符串是否相等。
  •   
  • 使用 String.Compare String.CompareTo 方法对字符串进行排序,不检查相等性
  •   

答案 1 :(得分:35)

您应该使用静态String.Compare功能,如下所示

x => String.Compare (x.Username, (string)drUser["Username"],
                     StringComparison.OrdinalIgnoreCase) == 0

答案 2 :(得分:19)

请用此作比较:

$_GET['menu_id']

答案 3 :(得分:6)

其他答案在这里完全有效,但不知何故,输入StringComparison.OrdinalIgnoreCase并使用String.Compare需要一些时间。

我编写了简单的String扩展方法,您可以在其中指定比较是区分大小写还是使用布尔值无意义,将整个代码段附加到此处:

using System;

/// <summary>
/// String helpers.
/// </summary>
public static class StringExtensions
{
    /// <summary>
    /// Compares two strings, set ignoreCase to true to ignore case comparison ('A' == 'a')
    /// </summary>
    public static bool CompareTo(this string strA, string strB, bool ignoreCase)
    {
        return String.Compare(strA, strB, ignoreCase) == 0;
    }
}

在整个比较之后大约缩短10个字符 - 比较:

在使用String扩展名之前:

String.Compare(testFilename, testToStart,true) != 0

使用String扩展后:

testFilename.CompareTo(testToStart, true)

答案 4 :(得分:4)

您可以(虽然是controverse)扩展System.String以提供不区分大小写的比较扩展方法:

public static bool CIEquals(this String a, String b) {
    return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
}

并按原样使用:

x.Username.CIEquals((string)drUser["Username"]);

C#允许您创建可以在项目中用作语法的扩展方法,这非常有用。

这不是答案,我知道这个问题已经过时并且已经解决了,我只想添加这些内容。

答案 5 :(得分:3)

我想您会在此链接中找到更多信息:

http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/

使用String类上的Compare静态方法比较两个字符串。比较是否不区分大小由其中一个重载的第三个参数决定。例如:

string lowerCase = "abc";
string upperCase = "AbC";
int caseInsensitiveResult = string.Compare(lowerCase, upperCase,
  StringComparison.CurrentCultureIgnoreCase);
int caseSensitiveResult = string.Compare(lowerCase,
  StringComparison.CurrentCulture);

caseSensitiveResult值为-1(表示lowerCase为&#34;小于&#34; upperCase),caseInsensitiveResult为零(表示lowerCase&#34;等于&#34; upperCase)。

答案 6 :(得分:2)

我想为EqualsIgnoreCase写一个扩展方法

public static class StringExtensions
{
    public static bool? EqualsIgnoreCase(this string strA, string strB)
    {
        return strA?.Equals(strB, StringComparison.CurrentCultureIgnoreCase);
    }
}

答案 7 :(得分:1)

如何使用StringComparison.CurrentCultureIgnoreCase呢?

答案 8 :(得分:-11)

你总是可以使用功能: 。降低(); .ToUpper()。

转换你的字符串,然后比较它们......

祝你好运