Список VB .NET двумерного массива структуры

Мне нужно сохранить в 1D-массиве некоторые 2D-массивы структуры, то есть:

Public Structure CodeBlock
    Public R As Integer
    Public C As Integer
    Public text_tx As String
    Public text_bx As String
    Public selected As Boolean
End Structure

Public code(nrows, ncols) As CodeBlock

Public history(5) As List(Of code) '<-- the problem
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Он сообщает вам, что «Код типа не определен», поэтому все, что вам нужно сделать, это создать класс для кода.

Возможно, вы имеете в виду что-то вроде этого:

Public history As List(Of Code)

Public Structure CodeBlock
    Public R As Integer
    Public C As Integer
    Public text_tx As String
    Public text_bx As String
    Public selected As Boolean
End Structure

Public Class Code

    Public Property Stuff As CodeBlock(,)

    Public Sub New()
        ' Empty constructor
    End Sub

    Public Sub New(nRows As Integer, nCols As Integer)
        Stuff = New CodeBlock(nRows - 1, nCols - 1) {}
    End Sub

End Class

Sub Main()
    Dim cb = New Code(1, 2)
    Dim c = New CodeBlock With {.R = 1, .C = 2, .text_tx = "A", .text_bx = "B", .selected = False}
    cb.Stuff(0, 0) = c

    history = New List(Of Code)
    history.Add(cb)

End Sub

Лучше использовать имя получше, чем «Stuff» ;)

Спасибо, сейчас, чтобы избежать слишком большого количества изменений, я сначала попробую: Public History(5) As Object.

Boy80 28.07.2024 16:36

@Boy80 Использование Object — это маленькая неудача, признание поражения :( Думаю, ответ Оливье может быть ближе к тому, что вы хотите.

Andrew Morton 28.07.2024 16:41
Ответ принят как подходящий

В List(Of code) код должен быть именем типа; однако это переменная. Поскольку у вас нет имени типа для 2d-массива, объедините два объявления в одно.

Public history As List(Of CodeBlock(,)) ' List of 2D array of CodeBlock

Обратите внимание, что это пустой список. Вам нужно будет добавить такие элементы:

history.Add(New CodeBlock(nRows - 1, nCols - 1) {})
history(0)(0) = ...
history(0)(1) = ...

Или сначала присвойте 2D-массив переменной.

Dim code = New CodeBlock(nRows - 1, nCols - 1) {}
history.Add(code)
code(0) = ...
code(1) = ...

Другие вопросы по теме