Enumerable.Except produces the set difference of two sequences by using IEqualityComparer(Of T)
Imports System
Imports System.Linq
Imports System.Collections.Generic
Public Class Item
Public Property Name As String
Public Property Code As Integer
End Class
Public Class ItemComparer
Implements IEqualityComparer(Of Item)
Public Function Equals1(ByVal x As Item, ByVal y As Item) As Boolean Implements IEqualityComparer(Of Item).Equals
If x Is y Then Return True
If x Is Nothing OrElse y Is Nothing Then Return False
Return (x.Code = y.Code) AndAlso (x.Name = y.Name)
End Function
Public Function GetHashCode1(ByVal product As Item) As Integer Implements IEqualityComparer(Of Item).GetHashCode
If product Is Nothing Then Return 0
Dim hashItemName = If(product.Name Is Nothing, 0, product.Name.GetHashCode())
Dim hashItemCode = product.Code.GetHashCode()
Return hashItemName Xor hashItemCode
End Function
End Class
Public Class Example
Public Shared Sub Main()
Dim fruits1() As Item =
{New Item With {.Name = "apple", .Code = 9},
New Item With {.Name = "orange", .Code = 4},
New Item With {.Name = "lemon", .Code = 12}}
Dim fruits2() As Item =
{New Item With {.Name = "apple", .Code = 9}}
' Get all the elements from the first array
' except for the elements from the second array.
Dim except = fruits1.Except(fruits2, New ItemComparer())
For Each product In except
Console.WriteLine(product.Name & " " & product.Code)
Next
End Sub
End Class
Related examples in the same category