Warum gibt es eine Convert.ToInt32 (DateTime) -Methode, wenn die Operation "nicht unterstützt" ist? [geschlossen]

8

Die Convert.ToInt32(DateTime) Methode ist dokumentiert, um immer zu werfen an InvalidCastException weil "Diese Konvertierung wird nicht unterstützt."

Wenn es nicht unterstützt wird, warum existiert es überhaupt? Wäre es nicht sinnvoller, diese Funktion einfach nicht zu haben?

    
David Grinberg 20.08.2014, 20:57
quelle

2 Antworten

4

Sehen Sie sich die Convert Implementierung können Sie sehen, dass es auf der IConvertible Schnittstelle wird von den Typen implementiert, die konvertiert werden. Die Schnittstelle IConvertible erzwingt, dass ein Typ alle -Konvertierungsmethoden implementiert und wie beschrieben funktioniert:

  

Wenn es keine sinnvolle Konvertierung in einen Common Language Runtime-Typ gibt, löst eine bestimmte Implementierung der Schnittstellenmethode InvalidCastException aus.

Die fragliche Methode existiert also in Convert class wahrscheinlich , weil alle IConvertible s diese Methode haben müssen:

%Vor%

Also, ähnlich wie es andere angemerkt haben, scheint es eine Frage der Konsistenz mit IConvertible interface und Vollständigkeit zu sein. Die Implementierung von Convert könnte sogar generiert werden, da sie nur von IConvertible abhängt.

    
BartoszKP 20.08.2014, 21:12
quelle
3

Meine bisherige Vorliebe für die Code-Generierung war falsch. Es ist tatsächlich viel einfacher als das: fast alle Implementierungen der IConvertible Schnittstelle in DateTime wirf ein InvalidCastException . Diese Aufrufe werden immer aufgerufen, wenn Sie Convert.ToXXX() aufrufen, wie Sie hier sehen können:

Convert.ToInt64 :

%Vor%

Unterm Strich? Microsoft wollte die IConvertible -Schnittstelle in DateTime implementieren, wollte jedoch keine Implementierungen für andere Konvertierungen als ToDateTime , ToString und %Co_de% .

    
Jeroen Vannevel 20.08.2014 21:03
quelle

Tags und Links