Return .NET 中使用 TryParseExact 的默认日期

Return a default date with TryParseExact in .NET

为什么这个函数不是return默认值?

如果解析失败,日期 1900-01-01 应该 returned。

而是 returns 01/01/0001 .NET

的默认日期
Public Shared Function ParseDate(FieldName As Object) As Date
  Dim ID As Date = "1900-01-01"

  If TypeOf FieldName Is TextBox Then
    If Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, ID) Then
      ID = FieldName.Text
    End If
  End If

  Return ID
End Function

您误解了 DateTime.TryParse 的工作原理。它不会 return 您传递的 DateTime 作为后备值。 out 参数对您的输入参数不感兴趣。如果无法解析,TryParse 将为输出参数分配默认值 DateTime,即 MinValue。那是 documented.

When this method returns, contains the DateTime value equivalent to the date and time contained in s, if the conversion succeeded, or MinValue if the conversion failed. The conversion fails if the s parameter is null, is an empty string (""), or does not contain a valid string representation of a date and time. This parameter is passed uninitialized.

所以你看到它 returns DateTime.MinValue 如果它无法解析成功。


但是无论如何你都应该使用 returned Boolean 来确定它是否可以被解析:

Dim validDate = Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, ID)

以上函数可以重写为:

Public Shared Function ParseDate(FieldName As Object) As Date
    If TypeOf FieldName Is TextBox Then
        Dim dt as Date
        If Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, dt) Then
            Return dt
        End If
    End If

    Return New Date(1900, 1, 1)
End Function