Мне нужно сохранить в 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
Он сообщает вам, что «Код типа не определен», поэтому все, что вам нужно сделать, это создать класс для кода.
Возможно, вы имеете в виду что-то вроде этого:
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» ;)
@Boy80 Использование Object
— это маленькая неудача, признание поражения :( Думаю, ответ Оливье может быть ближе к тому, что вы хотите.
В 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) = ...
Спасибо, сейчас, чтобы избежать слишком большого количества изменений, я сначала попробую: Public History(5) As Object.