我是否应该避免错误“变量 'foo' 在它被赋值之前被使用。”?

Should I avoid the error "Variable 'foo' is used before it has been assigned a value.'?

我在 Visual Studio 2019 年的 VB.NET Framework 4.8 中工作。

我有一个模块是这样的:

Dim foo As JObject

If a OrElse b Then
    foo = GetSomeValue()
    '...
End If

If a Then
    Bar(foo)
    '...
End If

我在 bar(foo) 上收到一条警告,提示“变量 'foo' 在被赋值之前已被使用。”从逻辑上讲,这是不可能的。如果 a 为真,则为 foo 分配一个值。如果 a 为假,则不使用 foo。我以这种方式构建 if 语句,因为它看起来最好——更少的重复和错误的机会。 (在我的真实代码中,IF 语句的内部相当大)

但是我想知道我是否做错了什么——最好的做法是避免错误并以不同的方式编写它。或者我是对的,只是混淆了一个过于简单的错误检查?

解决方案是确保编译器可以看到该变量将始终被分配给。您的逻辑将不会被仔细检查以发现情况已经如此,因此您必须使其更加明显。解决方法很简单。这一行:

dim foo as JObject

隐含地将 foo 设置为 Nothing,因为这是所有变量的默认值。您可以简单地明确说明:

dim foo as JObject = Nothing

这将抑制警告,因为编译器会假定您特别希望该变量为 Nothing,因此您将负责确保它不会生成 NullReferenceException