+ -
当前位置:首页 → 问答吧 → list(of type)的删除,如何使用removeall?

list(of type)的删除,如何使用removeall?

时间:2007-07-19

来源:互联网

我定义了一个class
public   cls
      public   class   aa
                    public       a   as   string
                    public       b   as   string
              end   class

      public   class   bb
                    public     c   as   new   list(of   aa)
              end   class
end   class

定义类的变量
dim   d   as   new   cls
我在d中使用d.bb.add()方法添加了一些值,现在想全部删除它们,用d.bb.removeall()方法时出错,说什么没有Match。
我不是很懂,有那位大侠可以指教一下如何才能全部删除。

作者: randwind   发布时间: 2007-07-19

顶一下。

作者: ivyorg   发布时间: 2007-07-20

Public   Class   Form1

        Public   c   As   New   List(Of   aa)

        Private   Sub   Button1_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button1.Click
                Dim   a   As   New   aa
                a.a   =   "dd "
                a.b   =   "dd "
                Me.c.Add(a)
                '添加到集合
                MsgBox(c.Count.ToString)
                Me.c.Clear()
                '清除所有
                MsgBox(c.Count.ToString)
        End   Sub
End   Class

Public   Class   aa
        Public   a   As   String
        Public   b   As   String
End   Class

作者: caoqinghua   发布时间: 2007-07-20

如何删除指定某些元素,而不是全部删除?像如果指定要求只删除a="aa",b="bb"呢,如何做?

作者: dombo   发布时间: 2007-11-24

等等看

作者: shen3649   发布时间: 2011-11-30

RemoveAll(match As Predicate(Of T))
RemoveAll函数的功能:删除与指定的谓词所定义的条件相匹配的所有元素,即给定一个规则去判断各个元素是否满足该规则,如果满足则删除该元素。返回值是删除的个数。
Predicate(Of T)是泛型委托,表示定义一组条件(规则)并确定指定对象是否符合这些条件的方法。可以把委托看成是一种函数的类。Of T中的T的数据类型要和受委托的数据类型相同。
RemoveAll函数的运用方法:(1)先定义一个函数,该函数的返回值是Boolean,参数和受委托对象的类型一致,按ByVal方式传递;(2)把该函数的地址直接作为RemoveAll函数中的match。
该函数在执行时,会依次把受委托对象List的各个元素交给委托函数进行规则判断,如果返回值为True,表示满足规则,就可以删除该元素,否则不删除。
例如:已知一个列表,包含10个名字,现要把10个名字中所有姓“张”的名字删除。
Module Module1
'定义的函数,该函数返回值是Boolean型,
' 参数与委托对象数据类型一致
  '函数的代码:对委托对象要进行什么样的规则,
  ' 满足规则返回True,否则返回False
  Private Function check(ByVal s As String) As Boolean
  If s Like "张*" Then '姓“张”返回True,否则False
  Return True
  Else
  Return False
  End If
  End Function
  Sub Main()
  Dim arr() As String = {"和二", "张三", "李四", _
  "王五", "马六", "和三", _
  "张四", "李五", "王六", "小七"}

  '定义List对象并初始化值为arr数组
  Dim lt As New List(Of String)(arr)

  '打印当前数组中的元素
  For Each s As String In lt
  Console.Write(s & Space(2))
  Next
  Console.WriteLine()

  '使用RemoveAll删除满足规则的元素
  '定义一个委托类型,of后数据类型同要委托的函数参数
  Dim match As Predicate(Of String)
  'AddressOf相当于提取函数check的地址
  match = AddressOf check
  lt.RemoveAll(match)

  '上面三行代码可写成:
  'Dim match As New Predicate(Of String)(AddressOf check)
  'lt.RemoveAll(match)
  '或写成下面一行代码:
  'lt.RemoveAll(AddressOf check)

  For Each s As String In lt
  Console.Write(s & Space(2))
  Next

  Console.ReadLine()
  End Sub
End Module

作者: tdyan   发布时间: 2011-12-15