C#中Comparer<TKey>.Default在VB.NET的等价写法及报错问题
问题根源与解决方案
这个报错的核心原因是VB.NET中存在两个同名的Comparer类型,导致编译器匹配到了错误的那个:
- 一个是位于
System.Collections的非泛型Comparer类,它确实不支持类型参数,这就是你看到"Comparer没有类型参数"错误的原因; - 另一个是位于
System.Collections.Generic的泛型Comparer(Of T)类,这才是对应C#中Comparer<TKey>的正确类型。
在线转换器生成的代码里,[Default]的语法是没问题的——因为Default是VB.NET的关键字,当它作为属性名使用时,必须用方括号包裹来避免语法冲突,这部分转换是正确的,和报错无关。
解决方法
你有两种方式修复这个问题:
1. 显式指定泛型Comparer的命名空间
直接在代码中写出完整的命名空间,让编译器明确找到泛型版本:
System.Collections.Generic.Comparer(Of TKey).[Default].Compare(x.Item1, y.Item1)
2. 导入泛型命名空间(推荐)
在VB.NET文件的顶部添加Imports语句,导入System.Collections.Generic:
Imports System.Collections.Generic
之后就可以直接使用转换器生成的代码,编译器会自动匹配到泛型的Comparer(Of TKey):
Comparer(Of TKey).[Default].Compare(x.Item1, y.Item1)
内容的提问来源于stack exchange,提问作者Maury Markowitz
相关产品推荐
相关产品推荐

