Das erste, was zu beachten ist, ist, dass VB.NET kein direktes Analogon zum (type)instance
Casting-Mechanismus von C # hat . Ich spreche dies an, weil es als Ausgangspunkt für den Vergleich der beiden VB.NET-Operatoren nützlich ist (und sie sind Operatoren, keine Funktionen, obwohl sie eine Funktionssemantik haben).
DirectCast()
ist strenger als der C # Casting-Operator. Sie können nur wirken, wenn der Gegenstand, auf den bereits gewirkt wird, der Typ ist, auf den Sie wirken. Ich glaube, es werden immer noch Werttypen entpackt, aber sonst wird keine Konvertierung durchgeführt. So können Sie beispielsweise nicht wie bei einem C # -Guss von short
bis umwandeln. Sie können jedoch von einem in ein Array umwandeln, wenn Ihre zugrunde liegende Objektvariable wirklich eine ist . Und natürlich können Sie von in alles umwandeln, vorausgesetzt, der Typ Ihrer Objektinstanz liegt tatsächlich irgendwo unter Ihrem Umwandlungstyp im Vererbungsbaum.int
(int)
IEnumerable
IEnumerable
Array
Object
Dies ist wünschenswert, weil es viel schneller ist . Es müssen weniger Konvertierungs- und Typprüfungen durchgeführt werden.
CType()
ist weniger streng als der C # Casting-Operator. Es wird Dinge tun, die Sie mit einer einfachen (int)
Besetzung einfach nicht tun können , wie das Konvertieren einer Zeichenfolge in eine Ganzzahl. Es hat so viel Kraft wie das Aufrufen Convert.To___()
von C #, wobei das ___
der Zieltyp Ihrer Besetzung ist.
Dies ist wünschenswert, weil es sehr mächtig ist. Diese Leistung geht jedoch zu Lasten der Leistung. Es ist nicht so schnell wie der DirectCast()
Cast-Operator von oder C #, da es möglicherweise ziemlich viel Arbeit erfordert, um den Cast zu beenden. Im Allgemeinen sollten Sie es vorziehen, DirectCast()
wenn Sie können.
Schließlich haben Sie einen Casting-Operator verpasst:: Dies TryCast()
ist ein direktes Analogon zum as
Operator von C # .