не может конвертировать из 'out double?' чтобы "удвоить"
-
05-07-2019 - |
Вопрос
У меня есть следующий раздел кода в приложении, которое я пишу:
...
String[] Columns = Regex.Split(CurrentLine, Delimeter);
Nullable<Double> AltFrom;
...
if (AltFrom == null)
{
Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
}
...
Строка в предложении if не скомпилируется и показывает ошибку: не может конвертировать из 'out double?' «удвоить»
если я не сделаю AltFrom из Nullable-типа и довольно явно обозначу его как Double, все будет хорошо.
Конечно, это правильный код. Это просто ошибка в C # или я делаю что-то не так?
Решение
Во-первых, вы не можете неявно преобразовать double?
в double
. Причина в том, что каким будет значение null
, если value.HasValue
представляет значение out
(т. Е. T
является ложным)? То есть преобразование из ref
в <=> приводит к потере информации (это сужающееся преобразование). Неявные сужающие преобразования обычно не одобряются в рамках.
Но на самом деле проблема, которую вы видите здесь, это нечто иное. Если у вас есть метод, который принимает параметр <=> типа <=>, вы должны передать переменную типа <=>; в этом случае не может быть каких-либо изменений типа, как с параметрами не - <=> и non - <=>.
Чтобы обойти вашу проблему, используйте следующее:
if (AltFrom == null) {
double value;
Double.TryParse(Columns[LatIndex].Trim(), out value);
AltFrom = value;
}
Другие советы
Нет, параметр out действительно должен быть double
, а не Nullable<double>
.
double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
altFrom = temp;
}