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

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

有人能指出问题吗?


当前回答

您可以(尽管存在争议)扩展System。字符串提供不区分大小写的比较扩展方法:

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

这样使用:

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

c#允许你创建扩展方法,在你的项目中作为语法建议,非常有用。

这不是答案,我知道这个问题已经解决了,我只是想补充这些内容。

其他回答

其他答案在这里是完全有效的,但不知何故,输入StringComparison需要一些时间。OrdinalIgnoreCase也使用string。compare。

我已经编写了简单的字符串扩展方法,在那里你可以指定比较是否大小写敏感或大小写无关布尔,在这里附加整个代码片段:

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)

使用StringComparison怎么样?CurrentCultureIgnoreCase呢?

我想为EqualsIgnoreCase写一个扩展方法

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

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

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

祝你好运

您可以(尽管存在争议)扩展System。字符串提供不区分大小写的比较扩展方法:

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

这样使用:

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

c#允许你创建扩展方法,在你的项目中作为语法建议,非常有用。

这不是答案,我知道这个问题已经解决了,我只是想补充这些内容。