【问题标题】:IEqualityComparer(of object) for Intersect or Except not workingIEqualityComparer(of object) for Intersect 或 except 不起作用
【发布时间】:2023-04-09 22:46:01
【问题描述】:

enter code here想从主列表中删除项目,但给出错误“无法转换<ExceptIterator>d__99'1[类型的对象”

    Public Class FieldCollectionItemCompare
    Implements System.Collections.Generic.IEqualityComparer(Of FieldCollectionItem)

    Public Shadows Function Equals(ByVal x As FieldCollectionItem, ByVal y As FieldCollectionItem) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of FieldCollectionItem).Equals

        If x.UniqueID = y.UniqueID Then
            Equals = True
        Else
            Equals = False
        End If
    End Function

    Public Overloads Function GetHashCode(ByVal obj As FieldCollectionItem) As Integer Implements System.Collections.Generic.IEqualityComparer(Of FieldCollectionItem).GetHashCode
        GetHashCode = obj.UniqueID + obj.UniqueID
    End Function

    End Class

...这就是我正在做的事情

FieldCollectionToProcessList = FieldCollectionToProcessList.Intersect(FieldCollectionRejected, New FieldCollectionItemCompare)

FieldCollectionToProcessList = FieldCollectionToProcessList.Intersect(FieldCollectionAccepted, New FieldCollectionItemCompare)

...所有列表都是As Generic.List(Of FieldCollectionItem)

【问题讨论】:

  • 我是否需要检查任何比较列表计数是否为空?

标签: .net vb.net generics


【解决方案1】:

您正在尝试将Intersect 的结果分配回FieldCollectionToProcessList。结果不是List(Of FieldCollectionItem) - 它是IEnumerable(Of FieldCollectionItem)。如果您需要将其转回列表,则需要致电 ToList。不过,您可以一步完成:

// Variable names changed for sanity
list = list.Intersect(rejected, New FieldCollectionItemCompare).
            Intersect(accepted, New FieldCollectionItemCompare).
            ToList

请注意,如果您启用了 Option Strict,您应该能够在编译时看到错误。

您可能还想考虑创建一个HashSet(Of FieldCollectionItem),然后使用IntersectWith

这与您的自定义相等比较器无关,尽管我注意到您可以使用:

Return x.UniqueID = y.UniqueID

对于Equals,和

Return obj.UniqueID

GetHashCode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2016-04-26
    相关资源
    最近更新 更多