为什么我得到了
需要常量表达式
以下VB.net代码出错?
Public Shared Async Function DownloadAndCountBytesAsync(url As String, Optional token As CancellationToken = New CancellationToken) As Task(Of Integer)
与New CancelationToken
交换Nothing
并添加
If token = Nothing Then token = New CancellationToken
功能有效,但我不明白为什么第一个选项不起作用......
同样的事情似乎在C#
中正常工作public static async Task<int> DownloadAndCountBytesAsync(string url, CancellationToken token = new CancellationToken())
答案 0 :(得分:3)
VB中可选参数的默认值必须在编译时知道,这意味着它必须是文字,声明的常量或Nothing
。这意味着String
以外的任何引用类型只能具有默认值Nothing
。
实现目标的方法是重载方法:
Public Shared Async Function DownloadAndCountBytesAsync(url As String) As Task(Of Integer)
Return DownloadAndCountBytesAsync(url, New CancellationToken)
End Function
Public Shared Async Function DownloadAndCountBytesAsync(url As String, token As CancellationToken) As Task(Of Integer)
'...'
End Function
答案 1 :(得分:2)
C#和VB.Net是不同的语言,这只是它们之间的一个区别。
在C#中,optional arguments可能是:
- 一个恒定的表达;
- 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
- 表单default(ValType)的表达式,其中ValType是值类型。
但是in VB.Net,
- &#34;可选参数的默认值必须是常量表达式。