【发布时间】:2015-12-17 14:28:18
【问题描述】:
我遇到了一个问题,这似乎是在 C# Web api 程序中处理锯齿状数组时出现的错误。每次我更新一个单维数组时,它都会更新一个具有相同值的锯齿状数组,即使我没有要求它这样做。更令人费解的是,通过我的一维数组的每次更新迭代,我的锯齿数组中的所有条目都使用从第一个元素到当前元素的相同数据进行更新。这是我以前从未遇到过的,非常令人费解。下面是我的代码。
string[][] burialtable = new string[50][]; // the jagged array
string[] mytable = new string[7]; // the single dimension array
int count = 0;
try
{
while (rdr.Read())
{
mytable[0] = rdr.GetString(0);
mytable[1] = rdr.GetString(1);
mytable[2] = rdr.GetString(2);
mytable[3] = rdr.GetString(3);
mytable[4] = rdr.GetString(4);
mytable[5] = rdr.GetString(5);
mytable[6] = rdr.GetString(6);
burialtable[count] = mytable;
count++;
}
rdr.Close();
return burialtable;
通过mytable第一次迭代后,burialtable的第一个元素包含与mytable相同的数据。但是,在调试器中,我注意到当我进行 mytable 的第二次迭代时,burialtable 的第一个元素中的每个条目都会在填充 mytable 的同时更新为 mytable 的值。在 mytable 的第三次迭代中,burialtable 的第一个和第二个元素都随着 mytable 的更新而更新。这是奇怪还是什么?
在我的处理结束时,burialtable 包含 50 个相同数据的元素。相同的数据来自最后处理的记录。输出如下所示:
[["Uphoff","William R.","2/20/1985 ","1985","9 ","87 ","4 "],
["Uphoff","William R.","2/20/1985 ","1985","9 ","87 ","4 "],
["Uphoff","William R.","2/20/1985 ","1985","9 ","87 ","4 "],
["Uphoff","William R.","2/20/1985 ","1985","9 ","87 ","4 "],
["Uphoff","William R.","2/20/1985 ","1985","9 ","87 ","4 "],
["Uphoff","William R.","2/20/1985 ","1985","9 ","87 ","4 "],
我从来没有遇到过像这样奇怪的编程问题。似乎每当我更新单维数组时,我都会将锯齿状数组中的所有条目更新到当前元素,即使我没有请求它。这是我第一次使用锯齿状数组,所以我一定做错了什么。我正在尝试在数组中创建一个数组,我可以使用 web api 以 json 格式作为 web 服务返回。如果有人知道更好的方法来做到这一点,请告诉我。
感谢回复的两位。我还想出了另一个对我有用的答案。
burialtable[count] = new string[] { mytable[1], mytable[2], mytable[3], mytable[4], mytable[5], mytable[6] };
这两种方法都行得通,我又学到了一些新东西。感谢那些回答的人。
【问题讨论】:
标签: c# arrays json web asp.net-web-api