Y a-t-il une VB.NET équivalent pour C# 's'??'opérateur?

est - il un VB.NET équivalent pour l'opérateur c# ?? ?

164
demandé sur Stephen Kennedy 2008-12-31 19:46:57

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))
135
répondu Firas Assaad 2018-07-11 07:18:45

l'opérateur IF() devrait faire l'affaire pour vous:

value = If(nullable, defaultValueIfNull)

http://visualstudiomagazine.com/listings/list.aspx?id=252

101
répondu Nick 2015-06-27 19:45:57

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)))
67
répondu Code Maverick 2017-05-20 17:23:37

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 / || )

16
répondu StingyJack 2017-05-21 02:45:42

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.

9
répondu user1751825 2017-05-21 04:30:35

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"))
2
répondu FN90 2018-06-15 20:14:25