You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为VB.NET的List<T>编写泛型IFNotExistsAdd扩展方法

实现泛型的IFNotExistsAdd方法

我们可以通过扩展方法实现需求,兼顾通用性与你想要的调用逻辑,以下是完整实现:

1. 创建扩展方法模块

VB.NET中扩展方法必须定义在模块内,我们同时实现泛型通用版本和Connoisseur类型的便捷重载:

Module ListExtensions
    ''' <summary>
    ''' 泛型扩展方法:仅当列表中无符合条件元素时添加新元素
    ''' </summary>
    <Extension>
    Public Sub IFNotExistsAdd(Of T)(ByVal source As List(Of T), ByVal item As T, ByVal uniquenessCheck As Func(Of T, Boolean))
        If Not source.Any(uniquenessCheck) Then
            source.Add(item)
        End If
    End Sub

    ''' <summary>
    ''' Connoisseur类型专属重载:基于Name属性判断元素是否存在
    ''' </summary>
    <Extension>
    Public Sub IFNotExistsAdd(ByVal source As List(Of Connoisseur), ByVal item As Connoisseur)
        source.IFNotExistsAdd(item, Function(c) c.Name = item.Name)
    End Sub
End Module

2. 在按钮事件中使用方法

初始化列表并按需求调用IFNotExistsAdd:

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)()
    ' 初始化列表:添加{"test1","2"}
    CS.Add(New Connoisseur() With {.Name = "test1", .Pieces = "2"})

    ' Name为test1的元素已存在,不会添加
    CS.IFNotExistsAdd(New Connoisseur() With {.Name = "test1", .Pieces = "1"})

    ' Name为test2的元素不存在,会添加
    CS.IFNotExistsAdd(New Connoisseur() With {.Name = "test2", .Pieces = "1"})

    ' 验证输出(可替换为UI展示逻辑)
    For Each c In CS
        Console.WriteLine($"{{""{c.Name}"",""{c.Pieces}""}}")
    Next
End Sub

3. 预期输出

执行代码后将得到:

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

说明

  • 泛型版本可适配任意类型的List,只需传入对应的存在性判断逻辑。
  • Connoisseur专属重载简化了调用,直接基于Name属性完成去重判断。

内容的提问来源于stack exchange,提问作者Relaxing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:51:15