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

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)));

有人能指出问题吗?


当前回答

我想为EqualsIgnoreCase写一个扩展方法

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

其他回答

请用这个来做比较:

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);

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

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

用下面的方法代替

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

MSDN建议:

使用重载字符串。Equals方法测试两个字符串是否相等。 使用字符串。Compare和String。CompareTo方法用于对字符串进行排序,而不是检查是否相等。

使用StringComparison怎么样?CurrentCultureIgnoreCase呢?

你总是可以使用函数: .ToLower (); .ToUpper ();

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

祝你好运

我想为EqualsIgnoreCase写一个扩展方法

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