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?
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:
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.
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:
Unterm Strich? Microsoft wollte die IConvertible
-Schnittstelle in DateTime
implementieren, wollte jedoch keine Implementierungen für andere Konvertierungen als ToDateTime
, ToString
und %Co_de% .