Das sehe ich in Reflektor :
Public Shared Function IsDate(ByVal Expression As Object) As Boolean
Dim time As DateTime
If (Expression Is Nothing) Then
Return False
End If
If TypeOf Expression Is DateTime Then
Return True
End If
Dim str As String = TryCast(Expression,String)
Return ((Not str Is Nothing) AndAlso Conversions.TryParseDate(str, (time)))
End Function
Die Frage ist nun: Wenn ein Date
(VB.NETs Schlüsselwort für DateTime
Werte), könnte diese Methode jemals falsch zurückgeben?
Nein.
If (Expression Is Nothing)
Dies wird niemals für einen Wertetyp mit Rahmen wahr sein.
If TypeOf Expression Is DateTime
Dies wird toujours wahr sein, wenn der Methode explizit ein Date
.
Auch wenn TypeOf A Is B
falsch zurück, wenn B
ist eine Unterklasse von A
(was nicht der Fall ist), könnten Sie immer noch annehmen, dass dies immer true zurückgeben würde, da DateTime
kann als Werttyp nicht vererbt werden.
Sie sind also gut.
Meine Vermutung ist, dass dieser Code ursprünglich IsDate
in einem String
o Object
die nicht stark typisiert war; irgendwann muss jemand die SelectedDate
Eigenschaft, die eingegeben werden muss als Date
ohne sich die Mühe zu machen, diesen Validierungscode zu aktualisieren.