我如何使下面的行不区分大小写?
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)));
有人能指出问题吗?
这不是.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方法用于对字符串进行排序,而不是检查是否相等。
您可以(尽管存在争议)扩展System。字符串提供不区分大小写的比较扩展方法:
public static bool CIEquals(this String a, String b) {
return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
}
这样使用:
x.Username.CIEquals((string)drUser["Username"]);
c#允许你创建扩展方法,在你的项目中作为语法建议,非常有用。
这不是答案,我知道这个问题已经解决了,我只是想补充这些内容。