Domanda

Ho la seguente sezione di codice in un'app che sto scrivendo:

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

La riga nella clausola if non verrà compilata e mostra l'errore: non è possibile convertire da "out double?" a "raddoppiare"

se non faccio di AltFrom un tipo Nullable e piuttosto lo dichiaro esplicitamente come Double, tutto è felice.

Sicuramente questo è un codice valido. È solo un bug in c # o sto facendo qualcosa di sbagliato?

È stato utile?

Soluzione

Innanzitutto, non è possibile convertire implicitamente un double? in un double. Il motivo è perché quale sarebbe il valore di null se value.HasValue rappresentasse il out valore (ovvero, T è falso)? Cioè, la conversione da ref a <=> comporta una perdita di informazioni (è una conversione restrittiva). Le conversioni restrittive implicite sono generalmente disapprovate nel quadro.

Ma in realtà, il problema che stai vedendo qui è qualcosa di diverso. Quando si dispone di un metodo che accetta un <=> parametro di tipo <=>, è necessario passare una variabile di tipo <=>; non può esserci alcuna variazione di tipo in questo caso in quanto esiste con parametri non - <=> e non - <=>.

Per aggirare il problema, utilizzare quanto segue:

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

Altri suggerimenti

No, il parametro out deve davvero essere double, non Nullable<double>.

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top