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

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

Используйте оператор 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)) 

Оператор IF() должен сделать трюк для вас:

 value = If(nullable, defaultValueIfNull) 

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

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


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

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

 If( [argument1,] argument2, argument3 ) 

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

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

части

 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 опущен, первый аргумент должен быть ссылочным или нулевым. Если первый аргумент имеет значение Nothing , возвращается значение второго аргумента. Во всех остальных случаях возвращается значение первого аргумента. Следующий пример иллюстрирует, как эта оценка работает.

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

Вы можете использовать метод расширения. Это работает как 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) может обрабатывать только два варианта с возможностью NULL. Здесь можно Coalesce столько параметров, сколько необходимо. Первый ненулевой будет возвращен, а остальные параметры не будут оцениваться после этого (короткое замыкание, например AndAlso / && и OrElse / || )

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

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

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

C #

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

VB

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

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

Ознакомьтесь с документацией Microsoft о том, есть ли здесь Operator (Visual Basic): https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator

 If( [argument1,] argument2, argument3 ) 

Вот несколько примеров (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")) 
  • Есть ли разница между x ++ и ++ x в java?
  • !! c, является двумя НЕ?
  • Что означает оператор?? =?
  • Можете ли вы создавать пользовательские операторы на C ++?
  • Почему выражение a = a + b - (b = a) дает предупреждение о точке последовательности в c ++?
  • Android: Как получить уровень сигнала GSM для всех доступных сетевых операторов
  • Оператор копирования и оператор присваивания
  • Как работает оператор double arrow (=>) в Perl?
  • Разница между & и && в Java?
  • Нечеткая оценка компилятора отличается для постоянного выражения и другого выражения
  • Создание логического эксклюзивного или оператора в Java
  • Давайте будем гением компьютера.