在C#中,我有一些看起来像的代码:
(await GetBoolAsync()).ShouldBeTrue();
ShouldBeTrue()
是来自在布尔值上运行的Shouldly库的扩展方法。
VB.NET似乎不喜欢在括号中包装Await关键字:
(Await GetBoolAsync()).ShouldBeTrue()
编译器在行的开头报告开括号的语法错误。我可以通过声明一个中间变量来解决它,但有没有办法在像C#这样的一行中实现这一点?
一个完整的控制台应用程序来重现这个:
Imports System.Runtime.CompilerServices
Module Module1
Sub Main
End Sub
Async Function Test() As Task
(Await GetBoolAsync()).ShouldBeTrue()
End Function
Function GetBoolAsync() As Task(Of Boolean)
Return Task.FromResult(True)
End Function
<Extension()>
Public Sub ShouldBeTrue(x As Boolean)
End Sub
End Module
错误非常无益:
错误BC30035:语法错误。
答案 0 :(得分:2)
这样做有一种特殊的语法 - 您应该使用flatMap
关键字:
Call
那是因为你不能像在C#中那样直接调用Visual Basic中非文字表达式的成员:
Async Function Test() As Task
Call (Await GetBoolAsync()).ShouldBeTrue()
End Function
在这种特殊情况下,这包括(5).ToString() 'It is wrong!
的结果。
希望有所帮助!