为什么DateTime.MinValue是一个常量表达式,而不是VB.NET中的DateTime.MaxValue?

时间:2014-09-30 11:54:28

标签: vb.net datetime

我有一个庞大的方法签名如下:

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似乎很满意。

2 个答案:

答案 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)。