2014-09-30 3 views
-1

У меня есть мамонт подпись метода выглядит следующим образом:Почему DateTime.MinValue является постоянным выражением, но не DateTime.MaxValue в VB.NET?

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.

+1

Оба не являются константами, а являются полями Public Shared ReadOnly. –

+0

Ага, спасибо. Я удалил «endTime» и все еще получил ошибку. На данный момент ничего хорошего нет. – ProfK

+0

@TimSchmelter hm, вы редактировали это там? Я не видел, когда я посмотрел на него изначально. – vcsjones

ответ

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 
+0

Я теперь использую nullables, с по умолчанию 'Nothing', а затем в proc, если' Nothing', я устанавливаю min или max. – ProfK

+0

@ProfK: Звучит неплохо, если это ваша логика. –

0

В .NET нет механизма для создания константных значений произвольных значений (или ссылочных) типов.

Только те типы, для которых C# имеет литералы, позволяющие инициализировать константные поля, могут иметь значения const.


C# используются для записи большой части библиотеки базовых классов (BCL).

Смежные вопросы