为何用ForEach循环给整型数组赋值时抛出‘未将对象引用设到对象实例’异常
问题原因
- 第一个核心问题:你没有对
arNum整型数组做初始化,只声明了变量没有分配实际的内存空间,属于空对象,对空对象的元素赋值就会抛出「未将对象引用设置到对象的实例」异常。 - 第二个逻辑错误:
count变量定义在foreach循环内部,每次循环都会被重置为-1,执行+1后永远是0,最终你只会给arNum[0]反复赋值,其他数组位置都不会被写入数据。 - 额外优化提示:你直接写
letter + 5是char类型和int类型相加,得到的就是ASCII码加5后的数值,不需要再套Convert.ToInt32也能拿到正确结果,属于冗余写法。
修正方案
首先需要在循环外初始化arNum数组,长度和你遍历的arReverse长度一致即可,同时把count变量移到循环外面:
// 先初始化数组,长度和arReverse保持一致 int[] arNum = new int[arReverse.Length]; // count变量移到循环外初始化 int count = -1; foreach (char letter in arReverse) { count = count + 1; int num = letter + 5; Console.Write(num); Console.Write(" "); arNum[count] = num; }
也可以直接用for循环更简洁,不需要单独维护count变量:
int[] arNum = new int[arReverse.Length]; for(int i = 0; i < arReverse.Length; i++) { char letter = arReverse[i]; int num = letter +5; Console.Write(num + " "); arNum[i] = num; }
内容的提问来源于stack exchange,提问作者Dingo
相关产品推荐
相关产品推荐

