C# 添加到列表不起作用
本文关键字:不起作用 列表 添加 | 更新日期: 2023-09-27 17:56:48
我是C#的新手,我只是想创建一个简单的程序来在VS2010上执行一些基本的计算。我遇到的问题是我似乎无法将计算值添加到列表中。
List<double> distance = new List<double>();
List<double> speed = new List<double>();
// distance and speed are populated using Add()
List<double> slope = new List<double>();
double rise, run;
for (int i= 0; i< distance.Count(); i++)
{
rise = 0.0;
run = 0.0;
if (i> 0)
{
rise = speed[i] - speed[i- 1];
run = distance[i] - distance[i- 1];
if (rise == 0 || run == 0)
{
slope.Add(0.0);
}
else slope.Add(rise/run);
}
else slope.Add(0.0);
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", i, rise, run, rise/run, slope);
}
生成的输出为
...
10, -21.7, -0.089, -243.82, System.Collection.Generic.List`1[System.Double]
11, 1.49, -0.088, -16.93, System.Collection.Generic.List`1[System.Double]
12, -4.51, -0.514, 87.74, System.Collection.Generic.List`1[System.Double]
Add()
函数的所有其他用法都很好,但是,这些都是添加相同类型的另一个列表的元素或平均值。
为什么Add()
不喜欢使用两个双精度值进行计算?我应该在这里做什么?
您可以使用字符串。加入以制作昏迷分隔列表
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", i, rise, run, rise/run, string.Join(", ", slope));
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", i, rise, run, rise/run, slope);
您打印的所有值都是常规数字,slope
除外。它是一个列表,其中包含每次迭代的数字。因为它是一个更复杂的类型,所以它的ToString()
方法只给出它的确切类型。
您在这里有两个选择。要么只打印刚刚添加到列表中的值,slope[i]
,要么打印整个列表:
// print the value
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", i, rise, run, rise/run, slope[i]);
// print the whole list
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", i, rise, run, rise/run, string.Join(", ", slope));
因为这不是在控制台中显示列表的方式。
试试这个:
for(int i=0;i<slope.Count;i++)
{
Console.WriteLine(slope[i]);
}
您看到文本的原因是您的格式操作采用 ToString() 方法。
您的上升/运行划分似乎被分配了 System.Double 类型而不是原始类型双精度,因此 ToString() 给出了不同的结果。
没有"错误",但在这种情况下,为了方便起见,您可能希望显式使用原始双精度类型。
迭代列表如下,
foreach(double d in slope)
Console.WriteLine(d); //or Console.Write(d+" ");
你必须这样做,因为,列表不是 Console.WriteLine 的有效(此处有效是指您希望查看输出的方式)参数。 c# 将做.toString()
列表显示输出,因此您会看到System.Collection.Generic.List1[System.Double]
.你必须迭代它。