嵌套内联 if 语句
Nested inline if statement
在 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
并将其与行中的最后一个开放端 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
,但它会引发语法错误,而且我找不到相关文档。
我没有被困在任何地方,我知道这可能不是一个好的编程实践,但我只是想知道(出于好奇)是否可能。
我也知道我可以切换语句(即在 a 之前测试 b),但假设我不能(a 是一个列表,必须在 b 之前测试 Nothing,例如 Count)。
我刚刚使用您最后的嵌套 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
你可以这样做
ret = If(a, If(b, "A & B", "A & Not B"), "Not A")
就我个人而言,我从来不理解将所有内容都放在一行中的必要性。
您可能会发现这就是您所需要的:
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"
在 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
并将其与行中的最后一个开放端 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
,但它会引发语法错误,而且我找不到相关文档。
我没有被困在任何地方,我知道这可能不是一个好的编程实践,但我只是想知道(出于好奇)是否可能。
我也知道我可以切换语句(即在 a 之前测试 b),但假设我不能(a 是一个列表,必须在 b 之前测试 Nothing,例如 Count)。
我刚刚使用您最后的嵌套 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
你可以这样做
ret = If(a, If(b, "A & B", "A & Not B"), "Not A")
就我个人而言,我从来不理解将所有内容都放在一行中的必要性。
您可能会发现这就是您所需要的:
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"