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()不喜欢使用两个双精度值进行计算?我应该在这里做什么?

C# 添加到列表不起作用

您可以使用字符串。加入以制作昏迷分隔列表

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] .你必须迭代它。