You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中如何一次性修改结构数组成员的数组大小?

问题描述

我定义了如下结构:

Public Structure Plant
    Public Position() As Double
    Dim Cost As Double
    Dim Seed As Double
End Structure

并创建了结构数组:

Dim Population(10) As Plant

我需要为Population中所有元素的Position数组设置相同大小(如9),不想使用循环逐个ReDim,尝试为结构添加私有构造函数后初始化数组时出现错误:

Explicit initialization is not permitted for arrays declared with explicit bounds

请问是否有更简便的一次性设置方法?

解决方案

方法1:构造函数+LINQ批量生成

先给Plant结构添加公共构造函数,在构造逻辑里直接初始化Position数组的大小:

Public Structure Plant
    Public Position() As Double
    Dim Cost As Double
    Dim Seed As Double

    Public Sub New(positionSize As Integer)
        ReDim Me.Position(positionSize - 1)
        ' 可按需设置Cost、Seed的默认值
        Me.Cost = 0.0
        Me.Seed = 0.0
    End Sub
End Structure

然后通过Enumerable.Repeat配合ToArray,一次性生成所有已初始化的结构实例数组:

' 生成11个(索引0-10)Position大小为9的Plant实例数组
Dim Population = Enumerable.Repeat(New Plant(9), 11).ToArray()

这种方式完全不需要手动循环,一步完成所有元素的Position初始化。

方法2:数组初始化器(适合小数量场景)

如果数组元素数量不多,也可以直接在数组声明时逐个初始化:

Dim Population() As Plant = {
    New Plant(9),
    New Plant(9),
    ' 依次补充剩余实例,直到总数为11个
}

但元素数量较多时,这种方法效率不如第一种。

关键说明

你之前遇到的错误,原因是声明固定边界的数组(Dim Population(10))后,无法再使用显式初始化器。解决的核心是改用无边界数组声明,或者通过LINQ动态生成数组。另外,VB的结构是值类型,Enumerable.Repeat生成的每个数组元素都是独立的实例,修改其中一个的属性不会影响其他元素。

内容的提问来源于stack exchange,提问作者John Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:29:52