首页 > 解决方案 > 如果运行多个单行 If 语句,是否需要多个 Else 语句?

问题描述

我有一个语句在一行上执行两个 If 检查:

If JMdict(i).Senses.Count > 0 Then If JMdict(i).Senses.First.Gloss.Count > 0 Then meaning = JMdict(i).Senses.First.Gloss.First Else meaning = ""

我想知道是否需要添加第二个 Else,如下所示:

If JMdict(i).Senses.Count > 0 Then If JMdict(i).Senses.First.Gloss.Count > 0 Then meaning = JMdict(i).Senses.First.Gloss.First Else meaning = "" Else meaning = ""

还是第一个 Else 会覆盖所有代码路径?

基本上,我应该做什么

If [First Condition] Then If [Second Condition] Then [Result] Else [Nothing happens]

或者

If [First Condition] Then If [Second Condition] Then [Result] Else [Nothing happens] Else [Nothing happens]

我知道我可以AndAlso用作一个更整洁的解决方案,我只是好奇这个单行嵌套 If 在实践中如何工作。

标签: vb.netwinformsif-statement

解决方案


你的代码

If JMdict(i).Senses.Count > 0 Then If JMdict(i).Senses.First.Gloss.Count > 0 Then meaning = JMdict(i).Senses.First.Gloss.First() Else meaning = ""

是这个的缩写

If JMdict(i).Senses.Count > 0 Then 
    If JMdict(i).Senses.First.Gloss.Count > 0 Then 
        meaning = JMdict(i).Senses.First.Gloss.First() 
    Else 
        meaning = ""
    End If
End If

因此,如果JMdict(i).Senses.Count <= 0then 含义将不会被设置。

我可能会这样做,使用你提到的短路AndAlso

If JMdict(i).Senses.Any() AndAlso JMdict(i).Senses.First().Gloss.Any() Then meaning = JMdict(i).Senses.First().Gloss.First() Else meaning = ""

或使用If()稍微缩短代码

meaning = If(JMdict(i).Senses.Any() AndAlso JMdict(i).Senses.First().Gloss.Any(), JMdict(i).Senses.First().Gloss.First(), "")

使用If()清楚地表明意义将被设定,因为我们从meaning =

对于有阅读障碍的人,If()功能可以拆分成多行

meaning = If(JMdict(i).Senses.Any() AndAlso JMdict(i).Senses.First().Gloss.Any(),
             JMdict(i).Senses.First().Gloss.First(), 
             "")

您还可以If()用作 Null Coalescing 运算符。注意这个版本If()只需要两个参数

meaning = If(JMdict(i).Senses.FirstOrDefault()?.Gloss.FirstOrDefault(), "")

推荐阅读