C# 数组复制错误:NullReferenceException 异常及解决方法

问题描述

在 C# 中,当使用数组复制时,如果目标数组没有为每个子数组分配内存空间,就会引发 NullReferenceException 异常。

示例代码

Console.WriteLine('增加元素');
int[][] array_A = new int[3][] { new int[]{1,2,3 },
                                 new int[]{4,5},
                                 new int[]{6 },};
int[][] array_B = new int[4][];
for (int i = 0; i < array_A.GetLength(0); i++)
{
    for (int j = 0; j < array_A[i].Length; j++)
    {
        array_B[i][j] = array_A[i][j];
    }
}
array_A = array_B;
array_A[3][0] = 7;
for (int i = 0; i < array_A.GetLength(0); i++)
{
    for (int j = 0; j < array_A[i].Length; j++)
    {
        Console.Write(array_A[i][j] + " ");
    }
    Console.WriteLine("");
}

错误分析

上面的代码中,在将 array_A 复制到 array_B 时,没有为 array_B 的每个子数组分配内存空间。因此,在对 array_B 进行赋值操作时会引发 NullReferenceException 异常。

解决方案

为了避免该异常的发生,需要在复制数组之前,为目标数组的每个子数组分配内存空间。

Console.WriteLine('增加元素');
int[][] array_A = new int[3][] { new int[]{1,2,3 },
                                 new int[]{4,5},
                                 new int[]{6 },};
int[][] array_B = new int[4][];
for (int i = 0; i < array_A.GetLength(0); i++)
{
    array_B[i] = new int[array_A[i].Length];
    for (int j = 0; j < array_A[i].Length; j++)
    {
        array_B[i][j] = array_A[i][j];
    }
}
array_A = array_B;
array_A[3] = new int[] { 7 };
for (int i = 0; i < array_A.GetLength(0); i++)
{
    for (int j = 0; j < array_A[i].Length; j++)
    {
        Console.Write(array_A[i][j] + " ");
    }
    Console.WriteLine("");
}

解释

在复制 array_Aarray_B 时,首先为 array_B 的每个子数组分配内存空间,然后再进行赋值操作。另外,在为 array_A 的第四个子数组赋值时,需要先为其分配内存空间。

总结

在使用数组复制时,务必确保目标数组的每个子数组都分配了内存空间,以避免出现 NullReferenceException 异常。

C# 数组复制错误:NullReferenceException 异常及解决方法

原文地址: https://www.cveoy.top/t/topic/p2PM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录