数组是引用类型的例子
double[] num1 = new double[3];
double[] num2 = new double[3];
List<double[]> list1 = new List<double[]>();
List<double[]> list2 = new List<double[]>();
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 3; j++)
{
num1[j] = i + j * 0.01;
num2[j] = 0.1 * i + j * 0.01;
}
list1.Add(num1);
list2.Add(num2);
}
JArray array1 = JArray.FromObject(list1);
JArray array2 = JArray.FromObject(list2);
JObject jobj = new JObject(new JProperty("Voltage", array1), new JProperty("Current", array2));
File.WriteAllText("data.json", jobj.ToString());
代码的结果:里边的元素的值和最后一个元素的值相等。
原因:数组是引用类型,当double数组在循环外被创建时,通过循环一直都是将一个数组的引用添加到List中去,所以值都相等。
解决:只需将数组创建到循环中就可以
List<double[]> list1 = new List<double[]>();
List<double[]> list2 = new List<double[]>();
for (int i = 0; i < 100; i++)
{
double[] num1 = new double[3];
double[] num2 = new double[3];
for (int j = 0; j < 3; j++)
{
num1[j] = i + j * 0.01;
num2[j] = 0.1 * i + j * 0.01;
}
list1.Add(num1);
list2.Add(num2);
}
JArray array1 = JArray.FromObject(list1);
JArray array2 = JArray.FromObject(list2);
JObject jobj = new JObject(new JProperty("Voltage", array1), new JProperty("Current", array2));
File.WriteAllText("data.json", jobj.ToString());