如何在.NET中定义集合,以便您可以按值或名称引用项目

Jef*_*ock 4 .net vb.net

我经常定义一个类,我还定义了另一个类,它只是另一个类的集合.为此,我发现最简单的方法是将另一个类定义为Inherits List(Of Type).我定义集合类的原因是为集合添加额外的功能.以下面的代码为例.

Class Car
    Property Name As String
    Property Year As Short
    Property Model As String
End Class

Class CarCollection
    Inherits List(Of Car)

    Overloads Sub Add(ByVal Name As String, ByVal Year As Short, ByVal Model As String)
        Dim c As New Car

        c.Name = Name
        c.Year = Year
        c.Model = Model

        Add(c)
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

现在,如果我声明一个CarCollection变量,我如何通过名称或索引值引用Car,这似乎是.NET的集合方式.以.NET ToolStripItemCollection为例.您可以通过以下两种方式引用其中的项目:MyCollection(2)MyCollection("MyItemName")

我的问题当然是如何定义我自己的集合,以便我可以通过索引或名称来引用它.现在我只能通过索引来引用它.

Mar*_*ade 6

你可以使用KeyedCollection:

Imports System.Collections.ObjectModel

Public Class CarCollection
    Inherits KeyedCollection(Of String, Car)

    Protected Overrides Function GetKeyForItem(ByVal item As Car) As String
        Return item.Name
    End Function
End Class
Run Code Online (Sandbox Code Playgroud)