常量表达式需要在函数中设置可选参数的错误

时间:2015-03-30 02:10:25

标签: c# vb.net

为什么我得到了

  

需要常量表达式

以下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())

2 个答案:

答案 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;可选参数的默认值必须是常量表达式。
  •