我有一个名为Order
的类,其中一个字段是id
,它是Order
对象的唯一标识符。
所以我做了一些简单的事情来获取这些订单ID
Dim myOrderIds = (From x In Orders
Select x.id)
我得到myOrderIds
的类是IEnumerable(Of String),这是我所期望的。现在我想检查myOrderIds是否包含与其他OrderIds相同的内容。所以我应该把两者都放在一个HashSet中,并使用SetEqual,对吗?
Dim myOrderIdSet = myOrderIds.ToHashSet
这显然很简单,不要再简单了,我有一个数组,列表,可枚举的ID,我想把它放在一个hashSet中,非常简单
我得到了这个错误
Severity Code Description Project File Line Suppression State
Error BC30521 Overload resolution failed because no accessible 'ToHashSet' is most specific for these arguments:
Extension method 'Public Function ToHashSet() As HashSet(Of String)' defined in 'Enumerable': Not most specific.
Extension method 'Public Function ToHashSet() As HashSet(Of String)' defined in 'MoreEnumerable': Not most specific. nicehash2 C:\Users\teguh\Dropbox\vb.net\gridtrading.vb 22 Active
在我看来,ToHashSet方法好像在某个地方声明了两次,不知何故,它们发生了冲突。但这怎么可能呢?微软的人没有正确地编写代码?我该怎么办?
1条答案
按热度按时间hgqdbh6s1#
这不是微软的错,错误信息说其中一个选项来自
MoreEnumerable
,我认为是来自MoreLinq
NuGet包,您必须已经安装。如果您已经汇入两个相关的命名空间,则编译器将无法判断您想要呼叫哪一个。如果您无法移除NuGet套件或该内容中的其中一个命名空间汇入,则您可以'不要将方法作为扩展调用。如果将其作为常规方法调用,则可以限定名称以消除歧义,例如:另一种方法是使用
HashSet(Of T)
构造函数,该构造函数接受IEnumerable(Of T)
作为参数。