Timespan.TotalDays - невозможно преобразовать double в строку

Я искал решение в Google и здесь, но ничего не нашел по этому поводу. Я пытаюсь получить разницу между датами. Я написал что-то вроде

TimeSpan difference = timealarm.Subtract(DateTime.Now);

где будильник DateTime.Now + 3 hours. Эта линия, кажется, в порядке. я пытаюсь использовать

MessageBox.Show(difference.TotalMinutes);

но затем я получаю сообщение об ошибке, упомянутое в заголовке:

не может преобразовать тип «двойной» в «строку». Visual Studio показывает здесь ошибку - разница.TotalMinutes.

Я новичок в .net и С#, думаю, это просто.


person Robert Szczepański    schedule 30.05.2018    source источник
comment
попробуйте: MessageBox.Show(difference.TotalMinutes.ToString());   -  person Brad    schedule 30.05.2018
comment
Я, конечно, вставил неправильную ссылку, вот правильная - youtu.be/iYsdAyKBN6w?t=14m52s   -  person Robert Szczepański    schedule 31.05.2018


Ответы (2)


MessageBox.Show принимает строку. Тип difference.TotalMinutesdouble. Неявного преобразования из double в string нет, но вы можете вызвать метод ToString:

MessageBox.Show(difference.TotalMinutes.ToString());

Это просто будет использовать культуру по умолчанию, в которой вы работаете, для преобразования значения. (Таким образом, использует ли он запятую или точку в качестве десятичного разделителя, например, зависит от вашей системы.)

В общем, когда вы получаете такую ​​​​ошибку, вы должны проверить:

  • Является ли ваш «исходный» тип (в данном случае double) таким, каким вы его ожидаете? Если нет, возможно, вам следует изменить то, что вы вычисляете.
  • Является ли ваш «целевой» тип (в данном случае string) таким, каким вы его ожидаете? Если нет, возможно, вам следует изменить то, что вы вызываете, или то, как вы используете значение.

Если оба типа имеют смысл, вам нужно подумать о том, как вы хотите преобразовать тип «исходный» в тип «целевой», и это будет зависеть от контекста.

person Jon Skeet    schedule 30.05.2018
comment
Это работает, но почему тогда здесь работает без toString() - youtu.be/iYsdAyKBN6w? - person Robert Szczepański; 31.05.2018
comment
@RobertSzczepański: Если вы имеете в виду вызов Console.WriteLine, существует перегрузка Console.WriteLine, принимающая double. (Но я не смотрел все видео - если у вас есть конкретный пример, пожалуйста, объясните, какой именно. В идеале в тексте, но было бы полезно просто время в этом видео - иначе мне оставалось бы гадать, что вас смущает. .) - person Jon Skeet; 31.05.2018
comment
Я был уверен, что вставил ссылку с точным временем. В любом случае, вы ответили мне, это был мой вопрос, спасибо. - person Robert Szczepański; 31.05.2018

MessageBox требует строку, а ваше значение - двойное. Вам просто нужно преобразовать двойное значение в строку, подобную этой.

MessageBox.Show(difference.TotalMinutes.ToString());
person Marco Veríssimo    schedule 30.05.2018
comment
Я думаю, вы думаете о Java, учитывая использование Double.toString. - person Jon Skeet; 30.05.2018