Есть ли VB.NET-эквивалент для C # 's' ?? ' оператор?

Есть ли VB. NET эквивалент для оператора C # ???

вопрос задан 31.12.2008
Nathan Koop
16255 репутация

6 ответов


  • 134 рейтинг

    Используйте оператор If() с двумя аргументами ( Документация 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))
    
    ответ дан Firas Assaad, с репутацией 18130, 31.12.2008
  • 100 рейтинг

    Оператор IF() должен помочь вам:

    value = If(nullable, defaultValueIfNull)
    

    http: // visualstudiomagazine. ком / списки / список. ASPX? id = 252

    ответ дан Nick, с репутацией 8036, 31.12.2008
  • 67 рейтинг

    Принятый ответ не имеет никакого объяснения и представляет собой просто ссылку.
    Поэтому я решил оставить ответ, объясняющий, как работает оператор If, взят из MSDN:

    .

    Если оператор (Visual Basic)

    Использует оценку короткого замыкания для условного возврата одного из двух ценности. Оператор If может быть вызван с тремя аргументами или с двумя аргументы.

    If( [argument1,] argument2, argument3 )
    


    Если оператор вызван с двумя аргументами

    Первый аргумент для Если можно опустить. Это позволяет оператору быть вызванным с использованием только двух аргументов. Следующий список применяется только когда Если оператор вызывается с двумя аргументами.


    Запчасти

    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.
    


    Если аргумент Boolean опущен, первый аргумент должен быть ссылочный или обнуляемый тип. Если первый аргумент оценивается как Ничего, , значение второго аргумента возвращается. Во всех остальных случаях возвращается значение первого аргумента. Следующий пример иллюстрирует, как работает эта оценка.


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

    Пример обработки более двух значений (вложенных 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)))
    
    ответ дан Code Maverick, с репутацией 14284, 19.12.2013
  • 16 рейтинг

    Вы можете использовать метод расширения. Этот работает как SQL COALESCE и, вероятно, излишним для того, что вы пытаетесь проверить, но это работает.

        ''' 
    ''' Returns the first non-null T based on a collection of the root object and the args. '''
     
        ''' 
        ''' 
        ''' 
        ''' 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
        '''
        ''' 
         _
        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
    

    Встроенный If(nullable, secondChoice) может обрабатывать только два обнуляемых вариантов. Здесь можно Coalesce столько параметров, сколько нужно. Будет возвращен первый ненулевой, а остальные параметры не будут оцениваться после этого (короткое замыкание, например AndAlso/&& и OrElse/||)

    ответ дан StingyJack, с репутацией 15253, 31.12.2008
  • 9 рейтинг

    Одним из существенных ограничений большинства этих решений является то, что они не будут закорачиваться. Поэтому они на самом деле не эквивалентны? ?

    Встроенный оператор «if» не будет оценивать последующие параметры, если более ранний параметр не оценивается как ноль

    Следующие утверждения эквивалентны.

    C #

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

    VB

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

    Это будет работать во всех случаях, где "? ? " работает. Любое другое решение должно использоваться с особой осторожностью, поскольку оно может легко привести к ошибкам во время выполнения.

    ответ дан user1751825, с репутацией 1404, 26.02.2016
  • 2 рейтинг

    Ознакомьтесь с документацией Microsoft об операторе If (Visual Basic) здесь: https: // docs. Microsoft. com / en-us / dotnet / visual-basic / справочник по языку / операторы / оператор if

    If( [argument1,] argument2, argument3 )
    

    Вот несколько примеров (VB. Нетто)

    ' 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"))
    
    ответ дан FN90, с репутацией 101, 15.06.2018