не может конвертировать из 'out double?' чтобы "удвоить"

StackOverflow https://stackoverflow.com/questions/1603668

  •  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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top