在C#中填充数组会导致“对象引用未设置为对象的实例”。

时间:2013-04-23 09:32:45

标签: c# list generics

我想在我的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));

顾名思义,这是我的虚拟数据。这背后的想法是第一个数字表示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));
                }
            }

但是当我到达这里时: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]);,但得到了同样的错误。

3 个答案:

答案 0 :(得分:7)

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

if (dummyArray[index1, index2] == null) 
  dummyArray[index1, index2] = new List<KeyValuePair<int, int>>()

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

if (dummyData[i].Value != tempColNum)

将评估为true,您将尝试从索引[-1,0]

处的虚拟数组中提取元素

答案 1 :(得分:0)

似乎两个代码片段都没有真正连接。在第二个片段中,您将创建一个新的dummyArray,它只创建列表但不创建元素。然后开始使用第二个片段剩余部分中的元素。

你应该在创建列表和用法之间添加像fragement one这样的元素。

答案 2 :(得分:0)

因为当您调用dummyArray[index1, index2].Add(new KeyValuePair<int, int>(dummyData[i].Key, dummyData[i].Value));时,虚拟数组元素仍未初始化。

你应该像下面的代码一样检查null:

if (dummyArray[index1, index2] == null)
{
     dummyArray[index1, index2] = new List<KeyValuePair<int, int>>();
}

希望得到这个帮助。