簡體   English   中英

vb.net名單<t>如果不存在添加</t>

[英]vb.net list<T> if not exist add

我有一個清單

    Public Class Connoisseur
                Public Name As String
                Public Pieces As String
    End Class


Private Sub Button26_Click(sender As Object, e As RibbonControlEventArgs) Handles Button26.Click
    Dim CS As New List(Of Connoisseur)()
End Sub

如何使用 generics 寫一個 IFNotExistsAdd function

CS = {"test1","2"}

看起來像這樣

CS.IFNotExistsAdd(New Connoisseur() With{.Name="test1",.Pieces="1"}) 'This line will not be added because CS.Name already contains "test1"
CS.IFNotExistsAdd(New Connoisseur() With{.Name="test2",.Pieces="1"})

output 看起來像這樣

Output:

{"test1","2"}
{"test2","1"}

你的問題不是很清楚。 IFNotExistsAdd不是 List 的有效方法名稱,因此您必須創建擴展方法。

創建一個模塊(使用與調用類相同的命名空間)

Module Extensions

<Extension>
Public Sub IFNotExistsAdd(Of T)(list As List(Of T), item As T)
    If Not list.Any(Function(x) x.Equals(item)) Then
        list.Add(item)
    End If
End Sub

End Module

然后您需要向 class 添加一個 Equals 覆蓋(我還為屬性添加了一個初始化程序)

Public Class Connoisseur

Public Name As String
Public Pieces As String

Public Sub New(name As String, pieces As String)
    Me.Name = name
    Me.Pieces = pieces
End Sub

Public Overrides Function Equals(obj As Object) As Boolean
    If TypeOf obj Is Connoisseur Then
        Return EqualsItem(CType(obj, Connoisseur))
    Else
        Return False
    End If
End Function

Public Function EqualsItem(obj As Connoisseur) As Boolean
    Return obj.Name = Me.Name And obj.Pieces = Me.Pieces
End Function

End Class

然后您可以運行將項目添加到列表中,它只會添加那些唯一的項目

CS.IFNotExistsAdd(New Connoisseur("test1", 1))
CS.IFNotExistsAdd(New Connoisseur("test1", 1))
CS.IFNotExistsAdd(New Connoisseur("test2", 2))

這只會添加 test1 和 test2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM