C# 中不区分大小写的字符串比较问题排查
C# 开发中的一个常见陷阱涉及执行不区分大小写的字符串比较。 虽然 x.Username.Equals()
看起来可能合适,但如果未明确处理区分大小写,则可能会导致意外结果。
最初的方法x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase))
虽然看似正确,但在更大的背景下可能并不总是按预期发挥作用。
在 LINQ 表达式中使用 Equals
时会出现此问题,例如 FindIndex
。问题在于该方法对空值的隐式处理。
正确的做法
解决方案是直接使用String.Equals
,确保正确的空处理和不区分大小写的比较:
<code class="language-csharp">drUser["Enrolled"] = (enrolledUsers.FindIndex(x => String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));</code>
此修订后的代码显式调用静态 String.Equals
方法,该方法可以正确处理来自 x.Username
或 (string)drUser["Username"]
的潜在空值。
推荐的最佳实践
用于稳健且高效的字符串操作:
String.Equals
重载进行相等性检查,指定 StringComparison.OrdinalIgnoreCase
进行不区分大小写的比较。String.Compare
或 String.CompareTo
进行字符串排序操作。 这些方法为排序任务提供了更多控制和效率。示例实现
以下代码片段说明了推荐的最佳实践:
<code class="language-csharp">drUser["Enrolled"] = enrolledUsers.FindIndex(x => String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase));</code>
通过遵循这些准则,开发人员可以避免常见陷阱,并确保在 C# 应用程序中进行准确、高效的不区分大小写的字符串比较。
以上是为什么在 C# 中使用 `x.Username.Equals()` 进行不区分大小写的字符串比较失败?的详细内容。更多信息请关注PHP中文网其他相关文章!