嵌套结构体中数组维度设置报错:CS0426问题求助
问题分析与修正
你的错误根源在于对类型与实例字段的混淆,以及错误的类型访问方式:
错误的类型访问路径
strInner_1是直接定义在MyApp类下的结构体类型,并非嵌套在strMAIN内部。所以strMAIN.strInner_1这种写法完全错误,编译器自然找不到这个类型。混淆了字段与类型
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
相关产品推荐
相关产品推荐

