如何设置系统?datetime的空值,作为子例程中的可选参数

本文关键字:子例程 参数 空值 设置 系统 datetime 何设置 | 更新日期: 2023-09-27 18:14:16

我尝试了以下操作,但我得到了错误

需要常量表达式

Public Sub ExampleSub(ByVal Test as string, 
  Optional ByVal fromDate As System.Nullable(Of DateTime) = Date.Today)
'A Great sub!
End sub

这里是c#

public void ExampleSub(string Test, 
  System.Nullable<DateTime> fromDate = System.DateTime.Today)
{
    //A Great sub!
}

Thanks in advance

如何设置系统?datetime的空值,作为子例程中的可选参数

默认参数不能使用非常量表达式。System.DateTime.Today将取决于您何时运行程序,因此它不是恒定的。

使用一个常量表达式默认,然后检查,并设置fromDateSystem.DateTime.Now例程。通常使用null作为@sehes答案中的特殊值。如果null对你的代码有另一个特殊的含义,你可以使用一个永远不会被用作默认参数的值,例如System.DateTime.MinValue:

public void ExampleSub(string Test, 
  System.Nullable<DateTime> fromDate = DateTime.MinValue)
{
    fromDate = fromDate == DateTime.MinValue ? System.DateTime.Now : fromDate;
    //A Great sub!
}

不能,编译器会告诉你为什么:)

在c#:

public void ExampleSub(string Test)
{
    //A Great overload!
    ExampleSub(Test, System.DateTime.Now);
}
public void ExampleSub(string Test, System.Nullable<DateTime> fromDate)
{
    //A Great sub!
}

现在,如果你知道null不会被调用者合法地传递进来,你可以这样做:

public void ExampleSub(string Test, System.Nullable<DateTime> fromDate = null)
{
    fromDate = fromDate?? System.DateTime.Now;
    //An Even Greater sub!
}

VB

Public Sub ExampleSub(Test As String, _
                      Optional fromDate As System.Nullable(Of DateTime) = Nothing)
    'A Great sub!
    If fromDate Is Nothing Then
        'code here for no fromDate
        'i.e. Now
        fromDate = DateTime.Now
    End If
End Sub

如果有人在VB中这样做。这是我解决我的问题的一种方式,我没有在这条线上找到确切的东西,如果它能帮助别人:

  /*I set below line as parameter in method*/
  Optional ByVal SlotDate As DateTime = Nothing
  If Not SlotDate = Nothing Then
       /* code to execute when date passed */
  Else
       /* code to execute when there is no date passed */
  End If