【问题标题】:Assign a subsequent ID to an item of List (Of) item将后续 ID 分配给 List (Of) 项目的项目
【发布时间】:2014-09-19 22:38:51
【问题描述】:

我在 VB.NET 中有一个(SomeClass 的)列表

每当有新项目添加到列表中时,我想为每个类分配一个后续 ID(1、2、3 等)。

我想知道这些类是按什么顺序添加到列表中的,因此我想介绍这些 ID。

这可能吗?如果可以,怎么做?

谢谢。

【问题讨论】:

  • 除非您替换项目 (myList(3) = myClassObj),否则索引是项目的 ID。在这种情况下,添加一个属性来存储添加的日期或时间;如果你不能改变类,你可以编写一个包装类或使用 Tag 属性。

标签: .net vb.net list


【解决方案1】:

如果你使用 List 类的 Add 方法,那么元素会被添加到列表的末尾。在这种情况下,列表中元素的顺序将与添加顺序完全相同,您不需要任何额外的 ID

【讨论】:

    【解决方案2】:

    有几种可能的方法,具体取决于您在更改设计时的灵活性水平。

    最简单的方法是Shadow List(Of T) Add 方法(List(Of T) 中没有有用的可覆盖方法:

    Public Class MySequentialClass
        Public Property Order As Integer
    End Class
    
    Public Class MySequentialClassCollection
        Inherits System.Collections.Generic.List(Of MySequentialClass)
    
        Public Shadows Sub Add(oItem As MySequentialClass)
            oItem.Order = Me.Count + 1
            MyBase.Add(oItem)
        End Sub
    
    End Class
    

    这种方法的问题是很脆弱,如果你总是直接调用集合的 Add 方法,你没问题,但如果你(或其他代码,如网格)使用 ICollection 接口,你的影子方法可能不会被调用。

    由于这种脆弱性,在这种情况下,我更喜欢从System.Collections.ObjectModel.Collection(Of T) 继承。当你这样做时,你可以同时覆盖 InsertItem 方法,因为它总是会被调用。另外,如果需要在删除项目时重新编号,也可以重写RemoveItem方法。

    Public Class MySequentialClassCollection
        Inherits System.Collections.ObjectModel.Collection(Of MySequentialClass)
    
        Protected Overrides Sub InsertItem(index As Integer, item As MySequentialClass)
            item.Order = Me.Count + 1
            MyBase.InsertItem(index, item)
        End Sub
    
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多