如何在LINQ中使用Zip运算符进行不区分大小写的比较
让LINQ Zip字符串比较不区分大小写的方法
你当前的代码通过Zip逐字符比较两个字符串的前100个字符,但默认是区分大小写的。要实现不区分大小写的比较,只需要修改Zip里的比较逻辑即可,这里有两种常用的可靠方式:
方法1:使用Char.Equals指定忽略大小写的比较规则
这种方式更规范,还能通过指定StringComparison避免区域文化带来的差异,推荐使用:
Dim str1 As String = "My first string here..." Dim str2 As String = "My FIRST string here..." Dim areEqual As Boolean = str1.Zip(str2, Function(x1, x2) Char.Equals(x1, x2, StringComparison.OrdinalIgnoreCase)) _ .Take(100) _ .All(Function(equal) equal) Console.WriteLine(areEqual)
这里用StringComparison.OrdinalIgnoreCase进行序数比较,是不区分大小写比较的最佳实践,不会受系统区域设置影响。
方法2:统一转换为小写/大写后比较
如果不需要考虑区域差异,也可以把两个字符都转换为小写(或大写)后再比较:
Dim str1 As String = "My first string here..." Dim str2 As String = "My FIRST string here..." Dim areEqual As Boolean = str1.Zip(str2, Function(x1, x2) Char.ToLowerInvariant(x1) = Char.ToLowerInvariant(x2)) _ .Take(100) _ .All(Function(equal) equal) Console.WriteLine(areEqual)
注意尽量用ToLowerInvariant/ToUpperInvariant而非普通的ToLower/ToUpper,避免不同语言区域的字符转换差异。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

