C#'不能隐式地从double转换为int'

时间:2016-01-13 08:50:25

标签: c# .net

无法从double转换为int,我的程序试图从它的列表中减去并将结果添加到新列表中,但由于某种原因我得到了这个错误:

List<double> test = new List<double>(); 
List<double> theOneList = new List<double>(); 
theOneList = wqList.Concat(rList).Concat(eList).ToList();
theOneList.Add(0);

theOneList.OrderByDescending(z => z).ToList();
for (double i = 0; i < 5; i++)
{
    test.Add(theOneList[i + 2.0] - theOneList[i + 3.0]);
    Console.WriteLine(test[i]);
}

总结:当我打印出列表而不是双倍的时候,由于&#39; int&#39;声明

4 个答案:

答案 0 :(得分:5)

列表索引器的类型应为int,但您在循环中将其声明为double

for (double i = 0; i < 5; i++)

i类型更改为int,而不使用i + 2.0i + 2等等。

答案 1 :(得分:1)

您无法使用双数索引数组。你需要使用int来做到这一点:

    for (int i = 0; i < 5; i++)
    {
        test.Add(theOneList[i + 2] - theOneList[i + 3]);
        Console.WriteLine(test[i]);
    }

答案 2 :(得分:0)

这是基于此MSDN page: Using Indexer

通常,索引器的声明如下所示:

public int this[int index]    // Indexer declaration
{
  // get and set accessors
}

如您所见,索引器声明为整数值。因此,有两种正确的方法可以使您的代码正常工作:

  1. 将名为double的{​​{1}}变量的数据类型更改为i。这是最好的做法,只要我允许估算。
  2. 在将int用作索引之前,您将i的值转换为int,但我不建议这样做。

    test.Add(theOneList[(int)i + 2] - theOneList[(int)i + 3]);
    

答案 3 :(得分:-1)

逻辑中存在多个错误;

    List<double> test = new List<double>(); 
    List<double> theOneList = wqList.Concat(rList).Concat(eList).ToList();
    theOneList.Add(0);

    theOneList = theOneList.OrderByDescending(z => z).ToList(); // you need to set the list after ordering; or the old list will not change
    for (int i = 0; i < 5; i++) // change variables to integer, do you know that at least 8 values exists in theOneList?
    {
        test.Add(theOneList[i + 2] - theOneList[i + 3]);
        Console.WriteLine(test[i]);
    }