Pergunta

Eu tenho o seguinte trecho de código em um aplicativo que estou escrevendo:

    ...
    String[] Columns = Regex.Split(CurrentLine, Delimeter);
    Nullable<Double> AltFrom;
    ...
    if (AltFrom == null)
    {
       Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
    }
    ...

A linha na cláusula if não irá compilar e mostra o erro: não podem converter de 'out duplo?' para 'out double'

Se eu não fizer AltFrom um tipo anulável e indicá-lo, em vez de forma explícita como um casal, tudo é feliz.

Com certeza este é um código válido. Este é apenas um bug no c # ou estou fazendo algo errado?

Foi útil?

Solução

Em primeiro lugar, você não pode converter implicitamente um double? a um double. A razão é porque o que seria o valor do double se o double? representou o valor null (ou seja, value.HasValue é false)? Ou seja, a conversão de um double? para um resultado double em uma perda de informação (que é uma conversão de restrição). conversões estreitamento implícitas são geralmente desaprovado no quadro.

Mas, na verdade, o problema que você está vendo aqui é algo diferente. Quando você tem um método que aceita um parâmetro out do tipo T, você deve passar em uma variável do tipo T; não pode haver qualquer alteração de tipo, neste caso, como há com parâmetros não ref e não out.

Para contornar o problema, use o seguinte:

if (AltFrom == null) {
   double value;
   Double.TryParse(Columns[LatIndex].Trim(), out value);
   AltFrom = value;
}

Outras dicas

Sem o parâmetro de saída realmente precisa ser um double, não um Nullable<double>.

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top