Frage

Gibt es ein Äquivalent VB.NET für C # 's ?? Operator?

War es hilfreich?

Lösung

Mit dem If() Operator mit zwei Argumenten ( Microsoft Dokumentation ):

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

Andere Tipps

Der IF() Operator sollte den Trick für Sie tun:

value = If(nullable, defaultValueIfNull)

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

Die akzeptierte Antwort hat keine Erklärung auch immer und ist einfach nur ein Link.
Deshalb dachte ich, ich würde eine Antwort hinterlassen, die erklärt, wie die If Betreiber Werke von MSDN genommen:


Wenn Operator (Visual Basic)

  

Verwendet Kurzauswertung bedingt eine von zwei zurück   Werte. Die Wenn Operator kann mit drei Argumenten oder mit zwei genannt werden   Argumente.

     
If( [argument1,] argument2, argument3 )


Wenn Operator aufgerufen, mit zwei Argumenten

  

Das erste Argument Wenn weggelassen werden. Dies ermöglicht dem Bediener   unter Verwendung von nur zwei Argumenten aufgerufen werden. Die folgende Liste gilt   nur, wenn die Wenn Operator mit zwei Argumenten aufgerufen wird.


Teile

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.


  

Wenn die Boolean Argument weggelassen wird, muss das erste Argument sein,   Referenz- oder Nullable Type. Wenn das erste Argument ausgewertet    Nichts , wird der Wert des zweiten Arguments zurück. In allen anderen Fällen wird der Wert des ersten Arguments zurück. Das   folgendes Beispiel zeigt, wie diese Auswertung funktioniert.


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

Ein Beispiel, wie mehr als zwei Werte (verschachtelter ifs) zu behandeln:

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

Sie können eine Erweiterungsmethode verwenden. Dieses funktioniert wie SQL COALESCE und ist wahrscheinlich übertrieben für das, was Sie testen wollen, aber es funktioniert.

    ''' <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

Der eingebaute in If(nullable, secondChoice) kann nur behandeln zwei Nullable-Entscheidungen. Hier kann man Coalesce so viele Parameter wie gewünscht. Die erste nicht-null ein zurückgegeben werden, und der Rest der Parameter sind nicht danach (kurzgeschlossen, wie AndAlso / && und OrElse / ||)

ausgewertet

Die eine erhebliche Einschränkung der meisten dieser Lösungen ist, dass sie nicht kurzgeschlossen werden. Sie sind daher nicht wirklich entspricht ??

Der eingebaute „wenn“ Operator wird nicht nachfolgenden Parameter bewerten, es sei denn der frühere Parameter nichts auswertet.

Die folgenden Aussagen sind äquivalent.

C #

var value = expression1 ?? expression2 ?? expression3 ?? expression4;

VB

dim value = if(exression1,if(expression2,if(expression3,expression4)))

Dies wird in allen Fällen arbeiten, wo „??“ funktioniert. Jede der anderen Lösungen müßte mit äußerster Vorsicht verwendet werden, da sie leicht Laufzeit Fehler einführen könnten.

Überprüfen der Microsoft-Dokumentation über Falls Operator (Visual Basic) hier: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator

If( [argument1,] argument2, argument3 )

Hier sind einige Beispiele (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"))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top