我在VB.NET中有一个List(of SomeClass)
每当新项目添加到列表中时,我想为每个类分配一个后续ID(1,2,3等)。
我想知道这些类已添加到列表的顺序,因此我想介绍这些ID。
这是可能的,如果是的话,怎么样?
谢谢。
答案 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