2009-03-10 2 views
12

Можно создать дубликат:
Is there a conditional ternary operator in VB.NET?Coalesce оператор и Условный оператор в VB.NET

Привет, ребята, Можем ли мы использовать Coalesce оператор (??) и условный оператор тройная (:) в VB.NET, как в C#?

+7

Это не дублирующий вопрос. Этот вопрос включает оператор нуль-коалесценции. –

+2

Для конвертации ?? к использованию VBnet. Если (,) с двумя параметрами, как указано [здесь] (http://stackoverflow.com/a/6792791/521554) – LosManos

ответ

15

Я думаю, что вы можете приблизиться с помощью инлайн, если заявление:

//C# 
int x = a ? b : c; 

'VB.Net 
Dim x as Integer = If(a, b, c) 
+3

* Примечание: использование оператора if таким образом применяется только в VB.NET 2008 и далее. –

+0

Чтобы использовать функцию If() как оператор коалесценции, ее нужно вызывать только с двумя параметрами, и ее необходимо использовать для ссылочных типов: 'Dim objC = If (objA, objB)' Это установит objC в objA если objA ничто, и в этом случае objC будет установлен в objB, будь то Nothing или нет. –

-3

Если должен быть IIf

Dim x as Integer=IIf(a,b,c)

+6

Nope. IIf оценивает все параметры, поскольку это обычный вызов. См. Http://dotnetslackers.com/VB_NET/re-55021_IIF_becomes_If_and_a_true_ternary_operator.aspx – LosManos

3

только для справки, Coalesce оператора для струнного

Private Function Coalesce(ByVal ParamArray Parameters As String()) As String 
    For Each Parameter As String In Parameters 
     If Not Parameter Is Nothing Then 
      Return Parameter 
     End If 
    Next 
    Return Nothing 
End Function 
12
Sub Main() 
    Dim x, z As Object 
    Dim y As Nullable(Of Integer) 
    z = "1243" 

    Dim c As Object = Coalesce(x, y, z) 
End Sub 

Private Function Coalesce(ByVal ParamArray x As Object()) 
    Return x.First(Function(y) Not IsNothing(y)) 
End Function 
+0

Используя LINQ, это самая эффективная реализация 'Coalesce()' вокруг. – miroxlav

+2

Проблема с этим (и ivan ниже) заключается в том, что все параметры будут оцениваться. Итак, если я напишу «Dim thingie = Coalesce (Session (« thingie »), новая Thingie), новый объект Thingie будет создан каждый раз (хотя он будет выброшен, если Thingie существует в сеансе) –

Смежные вопросы