Практическое руководство. Создание коллекции, используемой инициализатором набора (Visual Basic)
При использовании инициализатора коллекции для создания коллекции компилятор Visual Basic ищет Add
метод типа коллекции, для Add
которого параметры метода соответствуют типам значений в инициализаторе коллекции. Этот Add
метод используется для заполнения коллекции значениями из инициализатора коллекции.
Пример
В следующем примере показана OrderCollection
коллекция, содержащая открытый Add
метод, который инициализатор коллекции может использовать для добавления объектов типа Order
. Этот Add
метод позволяет использовать сокращенный синтаксис инициализатора коллекции.
Public Class Customer
Public Property Id As Integer
Public Property Name As String
Public Property Orders As OrderCollection
Public Sub New(ByVal id As Integer, ByVal name As String, ByVal orders As OrderCollection)
Me.Id = id
Me.Name = name
Me.Orders = orders
End Sub
End Class
Public Class Order
Public Property Id As Integer
Public Property CustomerId As Integer
Public Property OrderDate As DateTime
Public Sub New(ByVal id As Integer,
ByVal customerId As Integer,
ByVal orderDate As DateTime)
Me.Id = id
Me.CustomerId = customerId
Me.OrderDate = orderDate
End Sub
End Class
Public Class OrderCollection
Implements IEnumerable(Of Order)
Dim items As New List(Of Order)
Public Property Item(ByVal index As Integer) As Order
Get
Return CType(Me(index), Order)
End Get
Set(ByVal value As Order)
items(index) = value
End Set
End Property
Public Sub Add(ByVal id As Integer, ByVal customerID As Integer, ByVal orderDate As DateTime)
items.Add(New Order(id, customerID, orderDate))
End Sub
Public Function GetEnumerator() As IEnumerator(Of Order) Implements IEnumerable(Of Order).GetEnumerator
Return items.GetEnumerator()
End Function
Public Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator
Return Me.GetEnumerator()
End Function
End Class
Imports System.Runtime.CompilerServices
Module Module1
<Extension()>
Sub Add(ByVal genericList As List(Of Customer),
ByVal id As Integer,
ByVal name As String,
ByVal orders As OrderCollection)
genericList.Add(New Customer(id, name, orders))
End Sub
End Module
Dim customerList = New List(Of Customer) From
{
{1, "John Rodman", New OrderCollection From {{9, 1, #6/12/2008#},
{8, 1, #6/11/2008#},
{5, 1, #5/1/2008#}}},
{2, "Ariane Berthier", New OrderCollection From {{2, 2, #1/18/2008#},
{4, 2, #3/8/2008#},
{6, 2, #3/18/2008#},
{7, 2, #5/14/2008#},
{5, 2, #4/4/2008#}}},
{3, "Brian Perry", New OrderCollection From {{1, 3, #1/15/2008#},
{3, 3, #3/8/2008#}}}
}
См. также
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.