ne peut pas convertir de 'out double?' sortir double
-
05-07-2019 - |
Question
J'ai la section de code suivante dans une application que j'écris:
...
String[] Columns = Regex.Split(CurrentLine, Delimeter);
Nullable<Double> AltFrom;
...
if (AltFrom == null)
{
Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
}
...
La ligne dans la clause if ne sera pas compilée et affiche l'erreur: ne peut pas convertir à partir de 'out double?' pour doubler
si je ne fais pas de AltFrom un type Nullable et que je le déclare explicitement comme un Double, tout est heureux.
C’est sûrement un code valide. Est-ce juste un bug dans c # ou est-ce que je fais quelque chose de mal?
La solution
Tout d'abord, vous ne pouvez pas convertir implicitement un double?
en un double
. La raison en est que quelle serait la valeur de null
si le value.HasValue
représentait la out
valeur (c.-à-d. Si T
est faux)? Autrement dit, la conversion d'un ref
à un <=> entraîne une perte d'informations (il s'agit d'une conversion réduite). Les conversions restrictives implicites sont généralement mal vues dans le cadre.
Mais en réalité, le problème que vous voyez ici est différent. Lorsque vous avez une méthode qui accepte un paramètre <=> de type <=>, vous devez transmettre une variable de type <=>; Dans ce cas, il ne peut y avoir aucune variation de type, comme il en existe avec des paramètres non - <=> et non - <=>.
Pour résoudre votre problème, utilisez les éléments suivants:
if (AltFrom == null) {
double value;
Double.TryParse(Columns[LatIndex].Trim(), out value);
AltFrom = value;
}
Autres conseils
Non, le paramètre de sortie doit vraiment être un double
, pas un Nullable<double>
.
double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
altFrom = temp;
}