Y a-t-il une VB.NET équivalent pour C# 's'??'opérateur?
est - il un VB.NET équivalent pour l'opérateur c# ??
?
6 réponses
utilisez l'opérateur If()
avec deux arguments ( Microsoft documentation ):
' 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))
l'opérateur IF()
devrait faire l'affaire pour vous:
value = If(nullable, defaultValueIfNull)
la réponse acceptée n'a aucune explication et n'est qu'un lien.
Par conséquent, j'ai pensé que je laisserais une réponse qui explique comment l'opérateur If
fonctionne à partir de MSDN:
Si L'Opérateur (Visual Basic)
utilise l'évaluation de court-circuit pour retourner conditionnellement l'un des deux valeur. Le si opérateur peut être appelé avec trois arguments ou avec deux argument.
If( [argument1,] argument2, argument3 )
si L'opérateur a appelé avec deux Arguments
le premier argument de si peut être omis. Cela permet à l'opérateur pour être appelé en utilisant seulement deux arguments. La liste suivante s'applique seulement lorsque le Si l'opérateur est appelé avec deux arguments.
parties
Term Definition
---- ----------
argument2 Required. Object. Must be a reference or nullable type.
Evaluated and returned when it evaluates to anything
other than Nothing.
argument3 Required. Object.
Evaluated and returned if argument2 evaluates to Nothing.
lorsque l'argument booléen est omis, le premier argument doit être un de référence ou type nullable. Si le premier argument donne rien , la valeur de la seconde l'argument est retourné. Dans tous les autres cas, la valeur du premier argument. Le l'exemple suivant illustre le fonctionnement de cette évaluation.
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 manipulation de plus de deux valeurs (imbriqué if
s):
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)))
Vous pouvez utiliser une méthode d'extension. Celui-ci fonctionne comme SQL COALESCE
et est probablement exagéré pour ce que vous essayez de tester, mais il 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
le If(nullable, secondChoice)
intégré ne peut traiter que deux choix annulables. Ici, on peut Coalesce
autant de paramètres que souhaité. Le premier non-null sera retourné, et le reste des paramètres ne sont pas évalués après cela (court-circuité, comme AndAlso
/ &&
et OrElse
/ ||
)
la seule limite importante de la plupart de ces solutions est qu'elles ne seront pas court-circuitées. Ils ne sont donc pas réellement d'équivalent ??
l'opérateur" si " intégré, n'évaluera pas les paramètres suivants à moins que le paramètre précédent n'évalue à rien.
les énoncés suivants sont équivalents.
c#
var value = expression1 ?? expression2 ?? expression3 ?? expression4;
VB
dim value = if(exression1,if(expression2,if(expression3,expression4)))
ce sera travaux dans tous les cas où "??" travail. Aucune des autres solutions devront être utilisés avec une extrême prudence, car ils pourraient facilement introduire des bogues d'exécution.
vérifier la documentation de Microsoft à propos de L'opérateur If (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"))