在C#中填充数组引用"对象引用未设置为对象的实例".

Ler*_*ica 0 c# generics list

我想在我的asp.net mvc 3视图中使用一些虚拟数据.以下代码是应将数据传递给视图的控制器的一部分.

List<KeyValuePair<int, int>> dummyData = new List<KeyValuePair<int, int>>();
                dummyData.Add(new KeyValuePair<int, int>(1,1));
                dummyData.Add(new KeyValuePair<int, int>(1,2));
                dummyData.Add(new KeyValuePair<int, int>(2,1));
                dummyData.Add(new KeyValuePair<int, int>(3,1));
                dummyData.Add(new KeyValuePair<int, int>(4,1));
                dummyData.Add(new KeyValuePair<int, int>(4,2));
                dummyData.Add(new KeyValuePair<int, int>(4,3));
                dummyData.Add(new KeyValuePair<int, int>(4,4));
Run Code Online (Sandbox Code Playgroud)

顾名思义,这是我的虚拟数据.这背后的想法是第一个数字表示RowNumber形式表,第二个数字表示ColumnNumber.我想以某种方式组合与同一行相关但具有不同ColumnNumbers的记录.为此,我选择使用二维数组:

int dummyCount = dummyData.Count;

            List<KeyValuePair<int, int>>[,] dummyArray = new List<KeyValuePair<int, int>>[dummyCount,dummyCount];

            int index1 = -1;
            int index2 = 0;

            for (int i = 0; i < dummyCount; i++)
            {

                int tempColNum = 1;
                if (dummyData[i].Value != tempColNum)
                {
                    dummyArray[index1, index2].Add(dummyData[i]);
                    index2++;
                }
                else
                {
                    index1++;
                    index2 = 0;
                    dummyArray[index1, index2].Add(new KeyValuePair<int, int>(dummyData[i].Key, dummyData[i].Value));
                }
            }
Run Code Online (Sandbox Code Playgroud)

但是当我到达这里时:dummyArray[index1, index2].Add(new KeyValuePair<int, int>(dummyData[i].Key, dummyData[i].Value));我从标题中得到错误:Object reference not set to an instance of an object..本来我只尝试dummyArray[index1, index2].Add(dummyData[i]);但得到了同样的错误.

Ale*_*der 7

您的虚拟阵列未初始化.所有单元格均为空.您需要在每个单元格中创建列表,如下所示:

if (dummyArray[index1, index2] == null) 
  dummyArray[index1, index2] = new List<KeyValuePair<int, int>>()
Run Code Online (Sandbox Code Playgroud)

此外,您的代码有可能无效索引引用.如果在第一个周期

if (dummyData[i].Value != tempColNum)
Run Code Online (Sandbox Code Playgroud)

将评估为true,您将尝试从索引[-1,0]处的虚拟数组中提取元素