Возможно, вы ищете IEqualityComparer
Кроме (IEnumerable, IEnumerable, IEqualityComparer)
и короткий ответ
listA = listB.Except(listA, New MyComparer).toList
Пояснение
Давайте иметь класс, который содержится в списках
Private Class TestClass
Property Prop1 As String
Property Prop2 As String
End Class
Давайте иметь два списка
Dim listA As New Generic.List(Of TestClass)
Dim listB As New Generic.List(Of TestClass)
Мы хотим, чтобы значения были почти одинаковыми, например, Prop1
равно, а Prop2
не имеет значения. Итак, мы определяем компаратор
Private Class MyComparer
Implements Generic.IEqualityComparer(Of TestClass)
Public Function Equals1(x As TestClass, y As TestClass) As Boolean Implements IEqualityComparer(Of TestClass).Equals
Return x.Prop1 = y.Prop1
End Function
Public Function GetHashCode1(obj As TestClass) As Integer Implements IEqualityComparer(Of TestClass).GetHashCode
Return obj.Prop1.GetHashCode
End Function
End Class
и с помощью компаратора
Dim res = listB.Except(listA, New MyComparer)
Примечание
Вы должны быть осторожны с хеш-кодом. Равные объекты всегда должны иметь одинаковые хэши.
Когда хеш-объект различен, код работает, но работает медленнее.