3 Stimmen

Gibt es eine Möglichkeit, IsDate(Date) als false zurückkommen zu lassen?

Ich überprüfe gerade einen Code in VB.net, und in einem Validierungsobjekt haben sie folgendes geschrieben

If Not IsDate(Entity.SelectedDate) Then
            ErrorList.Add(New CValidationError("MainReport", "Please select a weekend date"))

SelectedDate ist vom Typ Date. Ich habe den Eindruck, dass es unmöglich ist, diese Bedingung jemals zu erfüllen. Stimmt das?

3voto

Dan Tao Punkte 121990

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.

1voto

bgs264 Punkte 4482

IsDate gibt für jedes Objekt, das in ein Datum umgewandelt werden kann, immer true zurück: http://msdn.microsoft.com/en-us/library/00wf8zk9%28VS.80%29.aspx

Es wird sogar true zurückgegeben, wenn Sie

dim myDate as Date
myDate = Nothing
IsDate(myDate)

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/3f70ef9e-79d0-4c89-ac33-ea16829e8298 sagt:

Bitte beachten Sie, dass Date ein v nicht ein Referenztyp, daher Zuweisung von Nothing an eine Variable vom Typs Date auf seinen Standardwert Wert gesetzt (siehe, was Lars sagt).

IsDate(date) wird also immer true zurückgeben.

Es lohnt sich jedoch zu überprüfen, ob IsDate auf die VB-Standardfunktion verweist und nicht eine anderswo geschriebene benutzerdefinierte Funktion ist (es scheint seltsam, dass sich der Validierungsfehlertext auf Wochenenddaten bezieht, also könnte es eine benutzerdefinierte Funktion sein). Klicken Sie mit der rechten Maustaste auf die Funktion und wählen Sie "go to definition", um sicherzugehen und zu sehen, wohin Visual Studio wechselt. Wenn es sich um die Funktion im Microsoft.VisualBasic-Namensraum handelt, würde ich sagen, dass sie immer true zurückgibt.

0voto

Registered User Punkte 8214

Ich glaube nicht, dass es möglich ist, diesen Zustand jemals zu erreichen. Das SelectedDate kann nur entweder durch das Kalendersteuerelement oder den OnSelectionChanged-Ereignishandler festgelegt werden. Selbst dann kann der Wert nur auf ein Datum oder eine Null gesetzt werden. Vielleicht sollte dies überprüfen, um sicherzustellen, dass ein Wert ausgewählt wurde, der nicht Null ist. Andernfalls lassen Sie die Prüfung einfach ganz weg.

0voto

Sven Punkte 885

Es wird nie zu diesem Fehler kommen. SelectedDate ist vom Typ Date. Sie werden also prüfen, ob es sich um ein Datum handelt.

0voto

MCain Punkte 467

Es sieht so aus, als würden sie nach einem Wochenenddatum suchen, warum also nicht die DateTime.DayOfWeek für Samstag oder Sonntag prüfen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X