Как устранить ошибку преобразования типа в приведенном ниже сценарии - PullRequest
0 голосов
/ 22 ноября 2018

Я изучаю основы программирования на C # и .NET.У меня есть цикл for, как показано ниже.

for(var i = minHour; i <= maxHour; i++)

Когда я заменяю вышеприведенное как:

for(var i = minHour; i <= maxHour; i+=0.5)

, тогда я вижу ошибку как:

Невозможно неявно преобразовать тип double в int.

Я не хочу объявлять i типа double, пожалуйста, помогите.Я ничего не знаю о неявном преобразовании.

Может кто-нибудь, пожалуйста, помогите мне, как мне исправить это, спасибо заранее.

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Я не уверен, что понимаю, почему вы хотите продолжать использовать var для этой ситуации вместо простого определения double i =, которое решило бы вашу проблему, но поскольку вы указали это в своем вопросе, я пока проигнорирую это.

Вместо этого давайте посмотрим, почему он выдает эту ошибку в первую очередь.Вы используете var i = для определения своей переменной, которая, как вы думаете, просто помещает i в общую переменную.Это не точно в C #.Вместо этого C # будет пытаться определить тип этой переменной, и, поскольку вы используете var i = minHour, тип i определяется типом minHour.

У вас есть несколько вариантов решения этой проблемы:

  1. Вы можете изменить minHour на двойное, что решит эту проблему.
  2. Вы можетеприведите minHour как двойное число, например: var i = (double)minHour
  3. Вы можете делать то, что, вероятно, должны, и указывать это, когда объявляете i следующим образом: double i = minHour

Надеюсь, это поможет!

0 голосов
/ 22 ноября 2018

В двух примерах переменная i инициализируется как minHour.Компилятор выведет тип только из этого оператора, а не из любого другого использования.Предположительно minHour - это int, поэтому в обоих примерах i - это int.Поскольку это int, сообщение об ошибке теперь должно иметь больше смысла.

Обратите внимание, что var не какой-то динамический тип, который, я подозреваю, является источником вашего недопонимания.Это известный тип с фиксированным типом, тип которого определяется во время компиляции из его использования.Таким образом, в обоих примерах они эквивалентны замене слова var на int.Если вы явно объявите его как double, он будет делать то, что вы хотите.

Совет: если вы хотите знать, какого типа будет var, наведите на него курсор мыши.

0 голосов
/ 22 ноября 2018

Вы можете решить это так:

//beware when using i as indexer.
for(var i = minHour * 2; i <= maxHour * 2; i++)
//note: both minHour and maxHour need to be multiplied by 2
//Proof:
// n = maxHour - minHour =>
// 2 n = 2 (maxHour - minHour) =>
// (maxHour - minHour) * 2 = 2 * maxHour - 2 * minHour
//

Или, альтернативно:

//type changed to double:
double minHour = 0, maxHour = 1;
for(var i = minHour; i <= maxHour; i+=0.5)

Или лучше (но не ваш любимый);

for(double i = minHour; i <= maxHour; i+=0.5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...