Jam*_*mie 204 c# case-insensitive string-comparison
如何使下面的行不区分大小写?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
Run Code Online (Sandbox Code Playgroud)
我今天早些时候给了我一些建议,建议我使用:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
Run Code Online (Sandbox Code Playgroud)
麻烦的是我不能让这个工作,我已经尝试了下面的行,这个编译但返回错误的结果,它返回注册用户作为注册的未注册和未注册的用户.
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)));
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出这个问题吗?
oce*_*eam 383
这不是.NET框架(4和+)中检查相等性的最佳实践
String.Compare(x.Username, (string)drUser["Username"],
StringComparison.OrdinalIgnoreCase) == 0
Run Code Online (Sandbox Code Playgroud)
请改用以下内容
String.Equals(x.Username, (string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
- 使用String.Equals方法的重载来测试两个字符串是否相等.
- 使用String.Compare和String.CompareTo 方法对字符串进行排序,而不是检查是否相等.
Ole*_*leg 36
你应该使用String.Compare如下的静态函数
x => String.Compare (x.Username, (string)drUser["Username"],
StringComparison.OrdinalIgnoreCase) == 0
Run Code Online (Sandbox Code Playgroud)
小智 22
请用它来比较:
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
您可以(尽管是controverse)扩展System.String以提供不区分大小写的比较扩展方法:
public static bool CIEquals(this String a, String b) {
return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)
并使用如下:
x.Username.CIEquals((string)drUser["Username"]);
Run Code Online (Sandbox Code Playgroud)
C#允许您创建可以作为项目语法的扩展方法,我会说非常有用.
这不是答案,我知道这个问题已经过时并且已经解决了,我只想添加这些内容.
其他答案在这里完全有效,但不知何故,它需要一些时间来打字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;
}
}
Run Code Online (Sandbox Code Playgroud)
之后,整个比较大约缩短10个字符 - 比较:
在使用String扩展之前:
String.Compare(testFilename, testToStart,true) != 0
Run Code Online (Sandbox Code Playgroud)
使用String扩展后:
testFilename.CompareTo(testToStart, true)
Run Code Online (Sandbox Code Playgroud)
我想为 EqualsIgnoreCase 编写一个扩展方法
public static class StringExtensions
{
public static bool? EqualsIgnoreCase(this string strA, string strB)
{
return strA?.Equals(strB, StringComparison.CurrentCultureIgnoreCase);
}
}
Run Code Online (Sandbox Code Playgroud)
改用怎么样StringComparison.CurrentCultureIgnoreCase?
| 归档时间: |
|
| 查看次数: |
219076 次 |
| 最近记录: |