将后续ID分配给List(Of)项目的项目

时间:2014-09-19 22:38:51

标签: .net vb.net list

我在VB.NET中有一个List(of SomeClass)

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

我想知道这些类已添加到列表的顺序,因此我想介绍这些ID。

这是可能的,如果是的话,怎么样?

谢谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

根据您在更改设计时的灵活程度,有几种可能的方法。

最简单的方法,但根据您调用Add的方式而脆弱的方法是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