VB.Net 替代 C# 下划线(丢弃)

She*_*ouk 5 vb.net

在 C# 中,我可以这样做:

_ = Bla();

我可以在 VB.Net 中做到这一点吗?

我认为答案是否定的,但我只是想确定一下。

Hei*_*nzi 11

_您的示例中使用的下划线 ( ) 是 C# 的丢弃标记。不幸的是,(目前)在 VB 中没有类似的东西。VB语言设计github页面上有关于添加类似功能讨论

但是,在您的示例中,您可以省略分配结果(在 C# 和 VB 中),即

Bla(); // C#
Run Code Online (Sandbox Code Playgroud)
Bla()  ' VB
Run Code Online (Sandbox Code Playgroud)

“丢弃变量”对out参数特别有用。在 VB 中,您可以只传递任意而不是变量来丢弃未使用的ByRef参数。让我给你举个例子:

以下两行在 C# 中无效:

var b = Int32.TryParse("3", 0); // won't compile
var b = Int32.TryParse("3", out 0); // won't compile
Run Code Online (Sandbox Code Playgroud)

从 C# 7 开始,您可以_为此目的使用:

var b = Int32.TryParse("3", out _); // compiles and discards the out parameter
Run Code Online (Sandbox Code Playgroud)

然而,这在 VB 中是完全有效的,即使是Option Strict On

Dim b = Int32.TryParse("3", 0)
Run Code Online (Sandbox Code Playgroud)

所以,是的,让“我想忽略 ByRef 值”更明确这一事实会很好,但在 VB.NET 中有一个简单的解决方法。显然,一旦 VB.NET 获得模式匹配解构器,这种解决方法就不够了。

  • @Heinzi我认为Christoph的意思是`Dim b = Int32.TryParse("3", Nothing)`,因为它更好地显示了意图。 (2认同)