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

嵌套结构体中数组维度设置报错:CS0426问题求助

问题分析与修正

你的错误根源在于对类型与实例字段的混淆,以及错误的类型访问方式:

  1. 错误的类型访问路径
    strInner_1是直接定义在MyApp类下的结构体类型,并非嵌套在strMAIN内部。所以strMAIN.strInner_1这种写法完全错误,编译器自然找不到这个类型。

  2. 混淆了字段与类型
    Main_1是strMAIN结构体里的一个字段实例,不是类型;同理number是strInner_1里的字段,类型是strInner_2[]。你不能用strMAIN.strInner_1.Main_1.number这种方式去声明数组,这完全不符合C#的语法规则。

修正后的代码示例

如果你需要初始化strMAIN实例中的数组,正确的写法应该是这样:

public class MyApp
{
    public struct strInner_2
    {
        public int Num;
    }

    public struct strInner_1
    {
        public string month_name;
        public strInner_2[] number;
        public int days_num;
    }
    
    public struct strMAIN
    {
        public strInner_1 Main_1;
        public strInner_1 Main_2;
    }
    
    static void Main()
    {
        // 1. 先创建strMAIN的实例
        strMAIN mainInstance = new strMAIN();
        
        // 2. 为Main_1的number数组分配内存,类型是strInner_2[]
        mainInstance.Main_1.number = new strInner_2[12];
        // 同理初始化Main_2的数组
        mainInstance.Main_2.number = new strInner_2[12];
        
        // 还可以直接创建单独的strInner_2数组,之后赋值给字段
        strInner_2[] numbers_1 = new strInner_2[12];
        mainInstance.Main_1.number = numbers_1;
    }
}

额外提示

  • 在C#中,结构体命名建议遵循PascalCase规范(比如Inner2、Inner1、MainStruct),而非下划线分隔的小写,这是行业通用的编码规范。
  • 如果你的结构体需要复杂的初始化逻辑,可以考虑为结构体添加构造函数,避免手动逐个赋值的繁琐。

内容的提问来源于stack exchange,提问作者Massimo Costanzo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:30:00