我有一个庞大的方法签名如下:
Public Shared Function GetChartData(Optional adHoc As Boolean = True, Optional startIndex As Integer = 0, Optional endIndex As Integer = Int32.MaxValue, _
Optional startTime As DateTime = DateTime.MinValue, Optional endTime As DateTime = DateTime.MaxValue, _
Optional deviceIds As List(Of Integer) = Nothing) As IEnumerable(Of ChartLinePoint)
编译器只抱怨endTime
并说出其默认值,' DateTime.MaxValue'必须是一个恒定的表达。 startTime
似乎很满意。
答案 0 :(得分:3)
两者都是不常量,但Public Shared ReadOnly
字段(evidence)。
因此编译器不接受DateTime.MinValue
作为可选参数中的常量表达式:
Sub FooMethod(Optional d As DateTime = DateTime.MinValue)
'COMPILER ERROR '
End Sub
但您可以使用Nothing
,这意味着VB.NET中的默认值,DateTime.MinValue
是默认值:
Sub FooMethod(Optional d As DateTime = Nothing)
' works '
End Sub
这也是使用Nullable(Of DateTime)
的可行方法,如果Date.MinValue
可能是有效值,则更是如此。
Sub FooMethod(Optional d As DateTime? = Nothing)
If d.HasValue Then
' use d.Value '
End If
End Sub
答案 1 :(得分:0)
没有机制在.NET中创建任意值(或引用)类型的const值。
只有那些C# 1 具有文字的类型,允许初始化const字段,才能有const值。
1 C#用于编写大部分基类库(BCL)。