Existe-t-il un équivalent VB.NET pour l' ??
opérateur C # ?
vb.net
operators
null-coalescing-operator
Nathan Koop
la source
la source
Réponses:
Utilisez l'
If()
opérateur avec deux arguments ( documentation Microsoft ):' Variable first is a nullable type. Dim first? As Integer = 3 Dim second As Integer = 6 ' Variable first <> Nothing, so its value, 3, is returned. Console.WriteLine(If(first, second)) second = Nothing ' Variable first <> Nothing, so the value of first is returned again. Console.WriteLine(If(first, second)) first = Nothing second = 6 ' Variable first = Nothing, so 6 is returned. Console.WriteLine(If(first, second))
la source
If()
déclaration en VB est la même que celleif...?...:
en C #, pas l'??
opérateur??
(voir une autre réponse à cette question: stackoverflow.com/a/20686360/1474939 )If
avec trois paramètres . Ce n'est pas similaire à l'??
opérateur de C # . La meilleure réponse est le If de Code Maverick avec deux arguments . (Nick avait une réponse similaire, des années plus tôt, mais n'inclut pas l'explication de MSDN.)L'
IF()
opérateur devrait faire l'affaire pour vous:value = If(nullable, defaultValueIfNull)
http://visualstudiomagazine.com/listings/list.aspx?id=252
la source
La réponse acceptée n'a aucune explication et n'est qu'un lien.
Par conséquent, j'ai pensé laisser une réponse expliquant le fonctionnement de l'
If
opérateur à partir de MSDN:Si, opérateur (Visual Basic)
Si l'opérateur est appelé avec deux arguments
les pièces
VB
' Variable first is a nullable type. Dim first? As Integer = 3 Dim second As Integer = 6 ' Variable first <> Nothing, so its value, 3, is returned. Console.WriteLine(If(first, second)) second = Nothing ' Variable first <> Nothing, so the value of first is returned again. Console.WriteLine(If(first, second)) first = Nothing second = 6 ' Variable first = Nothing, so 6 is returned. Console.WriteLine(If(first, second))
Exemple de gestion de plus de deux valeurs (imbriquées
if
):Dim first? As Integer = Nothing Dim second? As Integer = Nothing Dim third? As Integer = 6 ' The LAST parameter doesn't have to be nullable. 'Alternative: Dim third As Integer = 6 ' Writes "6", because the first two values are "Nothing". Console.WriteLine(If(first, If(second, third)))
la source
Vous pouvez utiliser une méthode d'extension. Celui-ci fonctionne comme SQL
COALESCE
et est probablement excessif pour ce que vous essayez de tester, mais cela fonctionne.''' <summary> ''' Returns the first non-null T based on a collection of the root object and the args. ''' </summary> ''' <param name="obj"></param> ''' <param name="args"></param> ''' <returns></returns> ''' <remarks>Usage ''' Dim val as String = "MyVal" ''' Dim result as String = val.Coalesce(String.Empty) ''' *** returns "MyVal" ''' ''' val = Nothing ''' result = val.Coalesce(String.Empty, "MyVal", "YourVal") ''' *** returns String.Empty ''' ''' </remarks> <System.Runtime.CompilerServices.Extension()> _ Public Function Coalesce(Of T)(ByVal obj As T, ByVal ParamArray args() As T) As T If obj IsNot Nothing Then Return obj End If Dim arg As T For Each arg In args If arg IsNot Nothing Then Return arg End If Next Return Nothing End Function
L'intégré
If(nullable, secondChoice)
ne peut gérer que deux choix Nullable. Ici, on peutCoalesce
autant de paramètres que souhaité. Le premier non nul sera retourné, et le reste des paramètres ne sera pas évalué après cela (court-circuité, commeAndAlso
/&&
etOrElse
/||
)la source
Return args.FirstOrDefault(Function(arg) arg IsNot Nothing)
:-)La seule limitation importante de la plupart de ces solutions est qu'elles ne court-circuitent pas. Ils ne sont donc pas réellement équivalents à
??
.L'
If
opérateur intégré n'évalue pas les paramètres suivants à moins que le paramètre précédent n'évalue à rien.Les affirmations suivantes sont équivalentes:
C #
var value = expression1 ?? expression2 ?? expression3 ?? expression4;
VB
dim value = if(expression1,if(expression2,if(expression3,expression4)))
Cela fonctionnera dans tous les cas où cela
??
fonctionne. Toutes les autres solutions devraient être utilisées avec une extrême prudence, car elles pourraient facilement introduire des bogues d'exécution.la source
Consultez la documentation Microsoft sur If Operator (Visual Basic) ici: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator
If( [argument1,] argument2, argument3 )
Voici quelques exemples (VB.Net)
' This statement prints TruePart, because the first argument is true. Console.WriteLine(If(True, "TruePart", "FalsePart")) ' This statement prints FalsePart, because the first argument is false. Console.WriteLine(If(False, "TruePart", "FalsePart")) Dim number = 3 ' With number set to 3, this statement prints Positive. Console.WriteLine(If(number >= 0, "Positive", "Negative")) number = -1 ' With number set to -1, this statement prints Negative. Console.WriteLine(If(number >= 0, "Positive", "Negative"))
la source