我想在我的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]);
,但得到了同样的错误。
答案 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>>();
}
希望得到这个帮助。