VB.NET字典键大小写不敏感:Option Compare Text为何无效?
关于
Option Compare Text与字典字符串比较的问题解答 为什么Option Compare Text对字典不起作用
Option Compare Text仅作用于VB.NET原生的字符串比较运算符(如=、<>),比如你测试代码里的If "one" = "One" Then会正常触发匹配。但.NET框架中的Dictionary<TKey,TValue>类属于通用集合,它的键值比较逻辑独立于VB的编译选项:
- 字典的键比较默认使用
EqualityComparer(Of String).Default,对应StringComparer.Ordinal(区分大小写的二进制比较),完全不受Option Compare Text影响。 ContainsValue方法内部使用Object.Equals做比较,同样默认遵循区分大小写的规则,也不响应VB的比较选项。
有没有简便的全局开关?
没有能全局控制字典比较行为的开关,必须在创建字典时显式指定字符串比较器,这是最直接的简便方案:
' 使用当前文化的大小写不敏感比较 Dim testdict As New Dictionary(Of String, String)(StringComparer.CurrentCultureIgnoreCase) ' 或者使用固定文化(避免系统文化差异) ' Dim testdict As New Dictionary(Of String, String)(StringComparer.InvariantCultureIgnoreCase)
这样创建的字典,键查找(如ContainsKey)就会自动支持大小写不敏感匹配。
如果需要对ContainsValue做大小写不敏感检查,要么遍历字典时用VB的=运算符(受Option Compare Text影响),要么手动指定比较逻辑:
' 利用VB的=运算符(受Option Compare Text控制) If testdict.Values.Any(Function(v) v = "OneTwo") Then ' 匹配逻辑 End If
内容的提问来源于stack exchange,提问作者Maury Markowitz
相关产品推荐
相关产品推荐

