2008-09-17 8 views
7

Les retours suivantssténographie si + types nullables (C#)

Type d'expression conditionnelle ne peut être déterminée parce qu'il n'y a pas de conversion implicite entre 'double' et '<null>'

aNullableDouble = (double.TryParse(aString, out aDouble) ? aDouble : null) 

La raison pour laquelle je ne peux pas simplement utiliser unNullableBool au lieu de l'arrondi avec unDouble est parce qu'unNullableDouble est une propriété d'un Ent généré classe ityFramework qui ne peut pas être utilisée comme un par.

Répondre

9
aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null; 
1
aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null) 
+0

new Nullabled() ?! N'est-ce pas ce que le double? la syntaxe est pour ?! – ljs

+0

Ouais, ça marchera aussi. Le mien est plus explicite, mais les deux formes vont générer du code identique. –

7

souffler juste la syntaxe sur dans la syntaxe complète au lieu du raccourci ... ce sera plus facile à lire:

aNullableDouble = null; 
if (double.TryParse(aString, out aDouble)) 
{ 
    aNullableDouble = aDouble; 
} 
+0

Nice. Cela ajoute de la clarté. – ljs

0

supporte .NET nullable types, mais en les déclarant en tant que tel, vous devez les traiter un peu différemment (comme, naturellement, quelque chose qui est normalement un type de valeur est maintenant une sorte de référence-ish). Ceci peut également ne pas aider beaucoup si vous finissez par avoir à faire trop de conversion entre des doubles nullables et des doubles réguliers ... comme cela pourrait facilement être le cas avec un ensemble de classes généré automatiquement.

1

L'effet secondaire intéressant de l'utilisation de types Nullable est que vous ne pouvez pas vraiment utiliser un IF en abrégé. Le raccourci IF doit renvoyer le même type à partir des deux conditions, et il ne peut pas être nul dans les deux cas. Donc, lancez ou écrivez-le :)

Questions connexes