2016-01-13 2 views
-4

не удается преобразовать из двойной Int, моя программа пытается вычесть из его списка и добавить результат в новый список, но по какой-то причине им получать эту ошибку:C# не может неявно преобразовать из двойной 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]); 
} 

Резюме: когда я распечатать список им получить Int, а не в два раза, я потерял точность в этом списке из-ВНУТР декларации

+0

Вы не можете использовать двойное значение в качестве индекса в списке или массива. Есть ли причина, почему вы не используете целое число? – Jules

+0

oh jeez, может быть, потому что я хочу, чтобы значения сохранялись как двойные? используя (int) im, получая ответы как целые числа и, таким образом, потерянную точность – AdanChristo

+0

, общий тип вашего списка и то, как вы индексируете, вообще не связаны. вы можете иметь список строк или список двойных и т. д., но вам всегда нужно индексировать его с помощью int .... Не имеет смысла индексировать 1,5-й элемент списка:) –

ответ

5

Список индексатор должен быть типа int, но вы объявляете это как double в вашей петле:

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

Изменение i типа для int и использовать не i + 2.0 но i + 2 и так далее.

1

Вы не можете указать массив с двойными номерами. Вы должны использовать ints для этого:

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

Это основано на этом MSDN page: Using Indexer

В целом, декларация индексатор выглядит следующим образом:

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

Как вы можете видеть, индексатор объявлен как целое значение. Таким образом, есть 2 надлежащие способы, чтобы сделать ваш код работать:

  1. Изменение типа данных double переменных под названием i к int. Это было бы лучшей практикой, поскольку мне разрешено давать оценку.
  2. Вы указали i значение int, прежде чем использовать его в качестве индекса, но я не рекомендую это делать.

    test.Add(theOneList[(int)i + 2] - theOneList[(int)i + 3]); 
    
Смежные вопросы