嵌套内联if语句

时间:2016-11-10 14:43:04

标签: vb.net if-statement nested conditional-operator

在VB .Net中,可以使用内联If语句,例如

if a Then ret = "A" Else ret = "Not A"

我知道也可以嵌套这些语句。我知道这可能不是一个好的做法,因为可读性下降......

If a Then If b Then ret = "A & B" Else ret = "A & Not B" Else ret = "Not A"

将按如下方式评估:

If a Then
    If b Then
        ret = "A & B"
    Else
        ret = "A & Not B"
    End If
Else
    ret = "Not A"
End If

现在,如果我删除最后一个Else语句,我就明白了:

If a Then If b Then ret = "A & B" Else ret = "A & Not B"

是:

If a Then
    If b Then
        ret = "A & B"
    Else
        ret = "A & Not B"
    End If
End If

所以我猜编译器会找到Else并将其与行中的最后一个openend If匹配,这是有道理的。 我的问题是:是否可以更改评估顺序?我的意思是,有可能Else与第一个if?

相匹配

所以它看起来像这样:

If a Then
    If b Then
        ret = "A & B"
    End If
Else
    ret = "Not A"
End If

但是内联(类似这样,添加括号以理解我的意思):

If a Then ( If b Then ret = "A & B" ) Else ret = "Not A"

我尝试使用括号或添加End If,但它会引发语法错误,而我找不到相关文档。

我没有被困在任何地方,我知道这可能不是一个好的prorgamming练习,但我只是想知道(出于好奇)是否可能。

我也知道我可以切换语句(即a之前的测试b),但是假设我不能(a是一个List,必须在b之前测试Nothing,例如Count)。

3 个答案:

答案 0 :(得分:5)

你可以这样做

ret = If(a, If(b, "A & B", "A & Not B"), "Not A")

就个人而言,我从未理解将所有内容放在一行中的必要性。

答案 1 :(得分:2)

您可能会发现这就是您所需要的:

If a And B Then

   ret = "A & B"

Else

   ret = "Not A"

End If

或者作为一行:

If A And B Then Ret = "A & B" Else RET = "Not A"

答案 2 :(得分:0)

我刚刚使用你的最终嵌套if语句创建了一个简单的控制台应用程序,它运行良好

Sub Main()
    Dim a = False
    Dim b = True
    If a Then
        If b Then
            Console.WriteLine("A & B")
        End If
    Else
        Console.WriteLine("A & Not B")
    End If
    Console.ReadLine()
End Sub