VB.NET中如何用一维数组存储结构体的二维数组?
问题原因
你标注的代码行错误在于:List(Of code)里用了变量名code作为泛型类型参数,泛型要求传入类型名称而非变量名。你需要存储的是CodeBlock类型的二维数组,对应的类型是CodeBlock(,)。
正确实现方案
根据你“用一维数组存储若干结构体二维数组”的需求,提供两种可行实现:
方式一:交错数组存储多个二维数组
交错数组是数组的数组,适合存储不同尺寸的二维数组:
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 ' 定义一个二维CodeBlock数组(nrows、ncols需提前定义) Public code(nrows, ncols) As CodeBlock ' 声明一维数组,每个元素为CodeBlock交错数组(模拟二维结构) ' history数组共6个元素(索引0-5),每个元素可存一个二维结构数组 Public history(5) As CodeBlock()() ' 示例:将现有code二维数组转为交错数组存入history(0) history(0) = New CodeBlock(nrows)() For i = 0 To nrows history(0)(i) = New CodeBlock(ncols) {} Array.Copy(code, i * (ncols + 1), history(0)(i), 0, ncols + 1) Next
方式二:结合List存储二维数组
如果需要动态增删二维数组,推荐用List(Of CodeBlock(,)),再用一维数组管理这些列表:
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 ' 一维数组,每个元素是存储二维CodeBlock数组的列表 Public history(5) As List(Of CodeBlock(,)) ' 初始化第一个列表并添加现有code数组 history(0) = New List(Of CodeBlock(,))() history(0).Add(code) ' 若只需存储多个二维数组,更简洁的方式是直接用List: ' Public history As New List(Of CodeBlock(,))() ' history.Add(code)
核心要点
- 泛型类型参数必须是类型名(如
CodeBlock(,)),不能用变量名(如code)。 - VB不支持直接声明二维数组的数组,需通过交错数组或
List间接实现。
内容的提问来源于stack exchange,提问作者Boy80
相关产品推荐
相关产品推荐

