1

エントリの追加または削除を比較する必要がある 2 つの一般的なリストがあります。リストは、ユーザー接続の詳細を含むカスタム クラスのものです。

Dim ConnectedUsersOld As New List(Of ConnectedUser)
Dim ConnectedUsersNew As New List(Of ConnectedUser)

私は見つけたい:

a) ConnectedUsersOld リストにはない、ConnectedUsersNew リストにあるすべての ConnectedUsers。(このセッションの新規ユーザー)

b) ConnectedUsersOld リストにあり、ConnectedUsersNew リストにないすべての ConnectedUsers。(前回のセッション以降に離脱したユーザー)

ConnectedUsers オブジェクトには、比較用の username というプロパティがあります。

4

1 に答える 1

1

これを試して:

Imports System.Linq
Imports System.Collections.Generic

Class Program
    Private Shared Sub Main(args As String())
        Dim ConnectedUsersOld As New List(Of ConnectedUser)() From { _
            New ConnectedUser() With { _
                Key .Id = 1 _
            }, _
            New ConnectedUser() With { _
                Key .Id = 2 _
            }, _
            New ConnectedUser() With { _
                Key .Id = 3 _
            } _
        }
        Dim ConnectedUsersNew As New List(Of ConnectedUser)() From { _
            New ConnectedUser() With { _
                Key .Id = 3 _
            }, _
            New ConnectedUser() With { _
                Key .Id = 4 _
            }, _
            New ConnectedUser() With { _
                Key .Id = 5 _
            } _
        }

        Dim comparer = New UserComparer()
        Dim newUsers = ConnectedUsersNew.Except(ConnectedUsersOld, comparer).ToList()
        Dim oldUsers = ConnectedUsersOld.Except(ConnectedUsersNew, comparer).ToList()
    End Sub

    Private Class ConnectedUser
        Public Property Id() As Integer
            Get
                Return m_Id
            End Get
            Set
                m_Id = Value
            End Set
        End Property
        Private m_Id As Integer
    End Class

    Private Class UserComparer
        Implements IEqualityComparer(Of ConnectedUser)

        Public Function Equals(x As ConnectedUser, y As ConnectedUser) As Boolean
            Return x.Id = y.Id
        End Function

        Public Function GetHashCode(obj As ConnectedUser) As Integer
            Return obj.Id
        End Function
    End Class
End Class
于 2013-08-13T13:00:13.207 に答える