VB. NET - Многоуровневые многоуровневые массивы - PullRequest
0 голосов
/ 20 июня 2020

Добрый день.

Я был бы очень признателен за помощь в создании пользовательского массива в VB. NET (не C#). Я недавно переключился с VBA на VB. NET и должен признать, что мне это нравится! Однако теперь я столкнулся с проблемой и, очевидно, с большим пробелом в моих знаниях в области программирования.

По сути, мне нужно создать настраиваемый массив, скомпилированный из настраиваемых массивов, который описывает строительную площадку.

Массив на верхнем уровне будет состоять из зданий, внутри каждого входа в здание будет массив этажей, а затем внутри каждого входа в этаж будут зоны этажа. На каждом уровне также должен быть другой массив для имен (то есть имена зданий, затем имена этажей, но не имена зон, так как это все, что необходимо сохранить на нижнем уровне).

Количество здания на площадке, этажи в каждом здании и зоны на каждом этаже в каждом здании могут быть разными для разных работ. И здесь я застрял.

Еще в те времена, когда я работал с VBA, я бы просто объявил несколько c типов Publi для зон, уровней и зданий и сложил бы их как неопределенные массивы друг в друге, но это не вариант в VB. NET (и, возможно, в любом случае бодж!)

Так что был бы очень признателен за любую помощь с этим. Я смотрел Structures, но не думаю, что это путь вперед. Я включил примерную схему того, чего я пытаюсь достичь, на случай, если это поможет.

Большое спасибо

Грэм

Пример изображения

1 Ответ

2 голосов
/ 20 июня 2020

VB. NET - объектно-ориентированный язык, поэтому используйте его как таковой. Здесь вам не нужны массивы. Классы со свойствами, которые являются коллекциями других классов. Примерно так:

Public Class Zone

    Public Property ZoneName As String

End Class

Public Class Floor

    Public Property FloorName As String

    Public ReadOnly Property Zones As New List(Of Zone)

End Class

Public Class Building

    Public Property BuildingName As String

    Public ReadOnly Property Floors As New List(Of Floor)

End Class

Public Class BuildingSite

    Public Property BuildingSiteName As String

    Public ReadOnly Property Buildings As New List(Of Building)

End Class

Затем вы можете создать объект BuildingSite и добавить объекты Building в его коллекцию Buildings, а также добавить объекты Floor в их Floors коллекции и добавить Zone объекты в свои Zones коллекции. Это похоже на то, как DataSet имеет DataTables и DataRelations в своих коллекциях Tables и Relations, а каждый DataTable имеет DataRows и DataColumns в своих коллекциях Rows и Columns.

РЕДАКТИРОВАТЬ:

Вот пример того, как вы могли бы go использовать эти классы:

Dim z1 As New Zone

z1.ZoneName = "Zone A"

Dim f1 As New Floor

f1.FloorName = "Floor 0"
f1.Zones.Add(z1)

Dim b1 As New Building

b1.BuildingName = "Building A"
b1.Floors.Add(f1)

Dim bs1 As New BuildingSite

bs1.BuildingSiteName = "Building Site 1"
bs1.Buildings.Add(b1)

bs1.Buildings.Add(New Building With {.BuildingName = "Building B"})

Dim b2 = bs1.Buildings(1)

b2.Floors.Add(New Floor With {.FloorName = "Floor 1"})

Dim f2 = b2.Floors(0)

f2.Zones.Add(New Zone With {.ZoneName = "Zone B"})

Как я уже сказал, это точно так же, как и многие другие примеры свойств коллекции во всем. NET Framework, например, вы можете создать DataSet и добавить DataTable к его Tables коллекции, а затем добавить DataColumn к Columns коллекции этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...