在 Visual Basic VB.Net 2010 中使用 System.DateTime 类型作为可选参数

Posted

技术标签:

【中文标题】在 Visual Basic VB.Net 2010 中使用 System.DateTime 类型作为可选参数【英文标题】:Using a System.DateTime type as optional parameter in Visual Basic VB.Net 2010 【发布时间】:2013-02-18 19:01:20 【问题描述】:

我正在尝试将可选 System.DateTime 参数传递给 VB.NET 2010 中的构造函数。

...
Public Sub New(Optional ByVal givendate As System.DateTime = System.DateTime.MinValue)
    ...

我收到一个错误“Konstanter Ausdruck erforderlich”,翻译为“需要恒定值”。我试图用 MinValue 填充一个变量,但我必须将此变量设为只读,这在尝试将默认值传递给可选参数时会导致完全相同的问题。 有没有办法将 MinValue 作为默认值传递给可选的 DateTime (实际上是 Date 类型)。 感谢您的听众。

【问题讨论】:

【参考方案1】:

在此期间我找到了一个解决方案(感谢 vbdotnetformums.com 的人们,所以我想分享结果:

第一个可能的解决方案是将参数定义为 Object,将默认值定义为 Nothing。然后投射日期时间。

第二种更简洁的解决方案(也是我遵循的)是重载构造函数。

这是 IanRyder (vbdotnetforums.com) 的解决方案:

Public Class MyClassExample
  Public Property DateToUseInClass As DateTime

  Public Sub New()
    DateToUseInClass = System.DateTime.Now
  End Sub

  Public Sub New(ByVal GivenDate As System.DateTime)
    DateToUseInClass = GivenDate
  End Sub
End Class

然后我可以实现我想要的行为:

Dim myVariable As New MyClassExample

Dim myVariable As New MyClassExample(DateTime.Today.AddDays(-1))

它完全按照我想要的方式工作。我希望有一天别人会从中受益。

【讨论】:

【参考方案2】:

您可以将Nothing设置为函数参数的默认值,然后在函数中设置今天的日期时间

Public Sub New(Optional ByVal fDate As System.DateTime = Nothing)
        If fDate = Nothing Then
            fDate = Now
        End If
    End Sub

【讨论】:

以上是关于在 Visual Basic VB.Net 2010 中使用 System.DateTime 类型作为可选参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Basic VB.Net 2010 中使用 System.DateTime 类型作为可选参数

在visual basic(而不是VB.net)中创建一个错误弹出框

Visual Basic 2010 2012 2013 从入门到精通

Visual Basic 语言的 Xmpp 库

对 Visual Basic 版本感到困惑

在Visual Basic .NET中反序列化JSON