2010-08-27 30 views
2

J'ai:VB.NET - Vous voulez ajouter ensemble deux types nullable - comment? (À savoir var1 + var2 où les deux sont annulable et vari1 = Nothing, Var2 = 5 résultats à rien)

Dim nVar1 As Long? 

Dim nVar2 As Long? 

Dim nVarSum As Long? 

nVar1 = Nothing 

nVar2 = 5 

nVarSum = nVar1 + nVar2 

Je préférerais le résultat à la fin avec nVarSum être 5, au lieu de rien. Je comprends que si vous ajoutez quelque chose à une valeur inconnue, vous finirez par "quelque chose + inconnu" ou x + 5 sera toujours égal à "x + 5" et non "5" parce que vous transportez toujours cet inconnu "X".

Cependant, comment puis-je traiter efficacement un inconnu ou Nothing comme un zéro pour les besoins de l'addition dans ce cas?

Merci! (Ce qui se passe essentiellement, c'est que l'utilisateur final nous envoie un fichier de données, ce code analyse ce fichier et résume ensuite environ 15 champs .Si l'utilisateur laisse ces champs vides au lieu de leur attribuer un zéro, je besoin de le traiter comme s'il s'agissait d'un zéro pour cette opération d'addition, mais tout le reste du code doit continuer à le voir comme une valeur Nothing puisque l'utilisateur n'a pas réellement soumis zéro ... ils ont soumis vide ou rien)

+0

Une autre raison d'utiliser C# 'nVarSum = (nVar1 ?? 0) + nVar2' –

+1

@Binary, la syntaxe de VB aussi succincte ici. 'nVarSum = If (nVar1,0) + nVar2' – JaredPar

+0

++ en effet! (Maintenance du projet, sinon je l'aurais fait en C#) – Maxer

Répondre

3

Je pense que le moyen le plus simple est d'utiliser l'opérateur If pour contraindre les valeurs Nothing par défaut.

nVarSum = If(nVar1,0) + If(nVar2,0) 

L'opérateur If sous la forme d'argument 2 lorsqu'il est appliqué à des types nullables fait essentiellement le suivant. Si le nullable a une valeur alors le retour est la valeur, sinon c'est le second argument.

+0

Je déteste quand les langues ajoutent des opérateurs ambigus. – ChaosPandion

+0

@Chaos, comment est-ce ambigu? C'est l'équivalent VB de l'opérateur de coallescing nul de C#. – JaredPar

+0

@JaredPar - 'If (Booléen, TrueValue, FalseValue)'? – ChaosPandion

5
nVar1.GetValueOrDefault()+ nVar2.GetValueOrDefault() 

ou en C#:

(nVar1??0)+(nVar2??0) 
0

ou explicitement test pour rien et définir votre valeur par défaut. Même résultat que les autres réponses postées.

If nVar1 is nothing then 
    nVar1 = 0 
end if 

nVarSum = nVar1 + nVar2 
+0

Je pense que je devrai utiliser l'opérateur If, parce que je ne peux pas changer la valeur réelle de nVar1 (j'ai ajouté une modification après le fait expliquant le contexte).Cette valeur de rien ne doit pas être conservée pour être utilisée plus tard dans le code, etc ... Sinon, je suis entièrement d'accord avec le fait de le mettre à zéro et d'en avoir fini avec ça. – Maxer