41 votes

En utilisant VB.NET IIF, j'obtiens NullReferenceException.

Je fais un peu de débogage et je veux donc enregistrer la valeur de l'eventArgs.

J'ai une ligne simple qui le fait essentiellement :

logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString())

D'après ce que je comprends de la fonction IIF, si la valeur e.Value est Nothing (null), elle doit renvoyer la chaîne vide, sinon elle doit renvoyer le .ToString de la valeur. Cependant, j'obtiens une NullReferenceException. Cela n'a pas de sens pour moi.

Une idée ?

77voto

bdukes Points 54833

IIf est une fonction réelle, donc tous les arguments sont évalués. Le site Si a été ajouté à VB.NET 2008 pour fournir la fonctionnalité de court-circuit que vous attendez.

Essayez

logLine = "e.Value: " + If(e.Value Is Nothing, "", e.Value.ToString())

3voto

Chris Farmer Points 10681

VB ne fait pas d'évaluation de court-circuit dans Iif. Dans votre cas, e.Value.ToString() est évalué, même si e.Value n'est rien.

3voto

Philip Fourie Points 12889

C'est le comportement attendu.

IIF est une fonction ; par conséquent, les paramètres de la fonction seront évalués avant de l'envoyer à la fonction.

En revanche, l'opérateur ternaire en C# est une construction du langage qui empêche l'évaluation du second paramètre si l'expression du ternaire est vraie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X