powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите с реализацией IEqualityComparer
3 сообщений из 3, страница 1 из 1
Помогите с реализацией IEqualityComparer
    #39802360
vladK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не специализируюсь в .Net, но в реализации SSIS пакета мне нужно сравнить две коллекции.

Нашел нужный пример, но заставить его работать не могу:
http://www.java2s.com/Code/VB/LINQ/Getalltheelementsfromthefirstarrayexceptfortheelementsfromthesecondarray.htm

Ниже он же. Проблема в том, что pets1 и pets2 трактуются как полностью различные, хотя записи в них идентичные.
Также вижу что реализованный метод Equals не вызывается вообще.

Спасибо!
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Public Class Pet
    Public Name As String
    Public Age As Integer
End Class

Public Class ItemComparer
    Implements IEqualityComparer(Of Pet)

    Public Function Equals1(ByVal x As Pet, ByVal y As Pet) As Boolean _
        Implements IEqualityComparer(Of Pet).Equals

        If x Is y Then Return True

        If x Is Nothing OrElse y Is Nothing Then Return False

        Return (x.Age = y.Age) AndAlso (x.Name = y.Name)

    End Function

    Public Function GetHashCode1(ByVal product As Pet) As Integer _
        Implements IEqualityComparer(Of Pet).GetHashCode

        If product Is Nothing Then Return 0
        Dim hashItemName = If(product.Name Is Nothing, 0, product.Name.GetHashCode())
        Dim hashItemAge = product.Age.GetHashCode()
        Return hashItemName Xor hashItemAge
    End Function

End Class


Imports System
Imports System.Linq
Imports System.Collections.Generic
Module Module1


    Public Sub Main()

        Dim pet1 As New Pet With {.Name = "Turbo", .Age = 2}
        Dim pet2 As New Pet With {.Name = "Peanut", .Age = 8}

        Dim pets1 As New List(Of Pet)()
        pets1.Add(pet1)
        pets1.Add(pet2)

        Dim pets2 As New List(Of Pet)()
        pets2.Add(New Pet With {.Name = "Turbo", .Age = 2})
        pets2.Add(New Pet With {.Name = "Peanut", .Age = 8})
        'pets2.Add(pet1)
        'pets2.Add(pet2)

        Dim equal As Boolean = pets1.SequenceEqual(pets2)

        Console.WriteLine(equal)

        For Each DiffPet In pets1.Except(pets2)
            Console.WriteLine(DiffPet.Name & " - " & DiffPet.Age)
        Next

        Console.ReadKey()

    End Sub

End Module
...
Рейтинг: 0 / 0
Помогите с реализацией IEqualityComparer
    #39802368
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladKТакже вижу что реализованный метод Equals не вызывается вообще.Ну ItemComparer вы создали - его же еще и применить надо при сравнении, сам по себе-то он не будет задействован. Например передать как второй аргумент для метода Except()

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Помогите с реализацией IEqualityComparer
    #39802585
vladK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Взлетело, спасибо огромное!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите с реализацией IEqualityComparer
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]