не может конвертировать из 'out double?' чтобы "удвоить" - PullRequest
0 голосов
/ 22 октября 2009

В приложении, которое я пишу, есть следующий фрагмент кода:

    ...
    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 # или я делаю что-то не так?

Ответы [ 2 ]

5 голосов
/ 22 октября 2009

Нет, параметр out действительно должен быть double, а не Nullable<double>.

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
3 голосов
/ 22 октября 2009

Во-первых, вы не можете неявно преобразовать double? в double. Причина в том, что каким будет значение double, если double? представляет значение null (то есть, value.HasValue является ложным)? То есть преобразование из double? в double приводит к потере информации (это сужающее преобразование). Неявные сужающие преобразования обычно не одобряются в рамках.

Но на самом деле проблема, которую вы видите здесь, это нечто иное. Если у вас есть метод, который принимает параметр out типа T, вы должны передать переменную типа T; в этом случае не может быть никакого изменения типа, как с параметрами не ref и out.

Чтобы обойти вашу проблему, используйте следующее:

if (AltFrom == null) {
   double value;
   Double.TryParse(Columns[LatIndex].Trim(), out value);
   AltFrom = value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...