VB.NET中的Coalesce运算符和条件运算符

use*_*348 16 vb.net conditional-operator null-coalescing-operator

可能重复:
VB.NET中是否有条件三元运算符?

大家好,我们可以在VB.NET中使用Coalesce运算符(??)和条件三元运算符(:),就像在C#中一样?

Nic*_*ski 18

我认为你可以使用内联if语句来接近:

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

'VB.Net
Dim x as Integer = If(a, b, c)
Run Code Online (Sandbox Code Playgroud)

  • *注意:使用if语句只适用于VB.NET 2008及更高版本. (3认同)
  • 要将 If() 函数用作合并运算符,必​​须仅使用两个参数来调用它,并且必须将其用于引用类型: `Dim objC = If(objA,objB)` 这会将 objC 设置为 objA,除非 objA 是Nothing,在这种情况下 objC 将被设置为 objB,无论它是否为 Nothing。 (2认同)

Min*_*uke 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
Run Code Online (Sandbox Code Playgroud)

  • 这个(以及下面的ivan)的问题是将评估所有参数.所以,如果我写'Dim thingie = Coalesce(Session("thingie"),新的Thingie)`每次都会创建一个新的Thingie对象(尽管如果会话中存在Thingie,它将被丢弃) (2认同)

小智 5

仅供参考,String的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
Run Code Online (Sandbox Code Playgroud)