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?

Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top