嵌套内联if语句

Mar*_*ans 0 vb.net if-statement nested conditional-operator

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

if a Then ret = "A" Else ret = "Not A"
Run Code Online (Sandbox Code Playgroud)

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

If a Then If b Then ret = "A & B" Else ret = "A & Not B" Else ret = "Not A"
Run Code Online (Sandbox Code Playgroud)

将按如下方式评估:

If a Then
    If b Then
        ret = "A & B"
    Else
        ret = "A & Not B"
    End If
Else
    ret = "Not A"
End If
Run Code Online (Sandbox Code Playgroud)

现在如果我删除最后一个Else语句,我得到这个:

If a Then If b Then ret = "A & B" Else ret = "A & Not B"
Run Code Online (Sandbox Code Playgroud)

这是:

If a Then
    If b Then
        ret = "A & B"
    Else
        ret = "A & Not B"
    End If
End If
Run Code Online (Sandbox Code Playgroud)

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

所以它看起来像这样:

If a Then
    If b Then
        ret = "A & B"
    End If
Else
    ret = "Not A"
End If
Run Code Online (Sandbox Code Playgroud)

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

If a Then ( If b Then ret = "A & B" ) Else ret = "Not A"
Run Code Online (Sandbox Code Playgroud)

我尝试用括号或添加一个,End If但它引发语法错误,我找不到这方面的文档.

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

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

the*_*tus 5

你可以这样做

ret = If(a, If(b, "A & B", "A & Not B"), "Not A")
Run Code Online (Sandbox Code Playgroud)

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