impossibile convertire da "out double?" "out double"
-
05-07-2019 - |
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?
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;
}