C#构造函数用new实例化数组后编译器报mArr为null的空引用异常
问题根因
你的错误由**变量遮蔽(Variable Shadowing)**导致,类成员数组从未被真正初始化:
你在构造函数的if分支中,重新声明了和类成员同名的局部变量mArr/mArr2,你申请的数组空间被赋值给了仅在构造函数if分支内生效的局部变量,类的实例成员mArr/mArr2自始至终都是null,访问时自然会抛出空引用异常。
修正方法
仅需修改构造函数中的两行代码,去掉局部变量的类型声明,直接给类成员赋值即可:
public tableau(int n, string type) { this.mLength = n; this.mType = type; if (mType == "int") { check = 1; // 去掉int[]声明,直接给类成员mArr赋值 mArr = new int[mLength]; } else if (mType == "string") { check = 2; // 去掉string[]声明,直接给类成员mArr2赋值 mArr2 = new string[mLength]; } }
另外你的代码还有两处小笔误可同步修正:
- 第56行末尾多了多余的双引号字符
- 第62行的占位符写法错误,将
{0]改为{0}即可
内容的提问来源于stack exchange,提问作者Marwane
相关产品推荐
相关产品推荐

