2009-03-10 5 views
12

가능한 중복 :
Is there a conditional ternary operator in VB.NET?병합 연산자와 조건 연산자

안녕 얘들 아, 우리가 사용할 수 합체 연산자 (?) 조건부 삼항 연산자 (:) C#에서와 마찬가지로 VB.NET에서?

+7

이것은 중복 질문이 아닙니다. 이 질문에는 null-coalescing 연산자가 포함됩니다. –

+2

변환 용 ?? VBnet에 If (,)와 같이 두 개의 매개 변수 (here) (http://stackoverflow.com/a/6792791/521554)를 사용하십시오. – LosManos

답변

15

난 당신이 인라인을 사용하여에 가까이 갈 수 있다고 생각 if 문

//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가 Nothing이면 objC가 Nothing인지 여부에 관계없이 objB로 설정됩니다. –

-3

, 단지 참조하여 IIf

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

+6

아니요. IIf는 일반 호출이므로 모든 매개 변수를 평가합니다. http://dotnetslackers.com/VB_NET/re-55021_IIF_becomes_If_and_a_true_ternary_operator.aspx를 참조하십시오. – LosManos

3

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가 Session에 존재한다면 버려 질 것입니다. –