Sind alle gleich? Unter welchen Umständen sollte ich mich gegenseitig vorziehen?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDIT: Vorschlag von NotMyself …
- TryCast (var, String)
Sind alle gleich? Unter welchen Umständen sollte ich mich gegenseitig vorziehen?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDIT: Vorschlag von NotMyself …
Antworten:
Diese sind alle leicht unterschiedlich und haben im Allgemeinen eine akzeptable Verwendung.
var.
ToString
()
gibt Ihnen die Zeichenfolgendarstellung eines Objekts, unabhängig davon, um welchen Typ es sich handelt. Verwenden Sie diese Option, wenn var
noch keine Zeichenfolge vorhanden ist.CStr
(var)
ist der VB-String-Cast-Operator. Ich bin kein VB-Typ, also würde ich vorschlagen, es zu vermeiden, aber es wird nichts wirklich schaden. Ich denke, es ist im Grunde das gleiche wie CType
.CType
(var, String)
konvertiert den angegebenen Typ unter Verwendung aller bereitgestellten Konvertierungsoperatoren in eine Zeichenfolge.DirectCast
(var, String)
wird verwendet, um ein Objekt in eine Zeichenfolge umzuwandeln. Wenn Sie wissen, dass eine Objektvariable tatsächlich eine Zeichenfolge ist, verwenden Sie diese. Dies ist das gleiche wie (string)var
in C #.TryCast
(wie von @ erwähnt NotMyself erwähnt ) ist wie DirectCast
, aber es wird zurückgegeben, Nothing
wenn die Variable nicht in eine Zeichenfolge konvertiert werden kann, anstatt eine Ausnahme auszulösen . Dies ist das gleiche wie var as string
in C #. Die TryCast
Seite auf MSDN hat auch einen guten Vergleich.TryCast
funktioniert nur für Werttypen , da es ein Typ sein muss, der Nothing
als Wert haben kann
CStr(var)
wird ersticken und eine Ausnahme auslösen, wenn die Variable DBNull.Value ist, aber die Alternative Convert.ToString(var)
eine leere Zeichenfolge zurückgibt .
Dim myList AS ArrayList=new ArrayList
Wenn Sie schreiben (From e In myList select CType(e.Name,String)).ToArray()
, funktioniert es nicht. Ich kam zum Schreiben ... select CType(e.Name.ToString,String)).ToArray()
und holte mein Lächeln zurück.
Cstr()
wird für eine bessere Leistung inline kompiliert.
CType
Ermöglicht Umwandlungen zwischen Typen, wenn ein Konvertierungsoperator definiert ist
ToString()
Zwischen Basistyp und Zeichenfolge wird eine Ausnahme ausgelöst, wenn keine Konvertierung möglich ist.
TryParse()
Von String zu Basis typeif
möglich, sonst wird false zurückgegeben
DirectCast
Wird verwendet, wenn die Typen über die Vererbung verknüpft sind oder eine gemeinsame Schnittstelle verwenden, wird eine Ausnahme ausgelöst, wenn die Umwandlung nicht möglich ist. trycast
In diesem Fall wird nichts zurückgegeben
MSDN scheint darauf hinzudeuten, dass die Cxxx-Casts für bestimmte Typen die Leistung in VB .NET verbessern können, da sie in Inline-Code konvertiert werden. Aus irgendeinem Grund wird auch DirectCast vorgeschlagen in bestimmten Fällen im Gegensatz zu CType vorgeschlagen (in den Dokumentationen wird angegeben, dass eine Vererbungsbeziehung besteht. Ich glaube, dies bedeutet, dass die Richtigkeit der Besetzung zur Kompilierungszeit überprüft wird und Optimierungen angewendet werden können, während CType immer die verwendet VB-Laufzeit.)
Wenn ich VB .NET-Code schreibe, hängt das, was ich verwende, davon ab, was ich tue. Wenn es sich um Prototypcode handelt, den ich wegwerfen werde, verwende ich alles, was ich gerade schreibe. Wenn es sich um Code handelt, den ich ernst meine, versuche ich, eine Cxxx-Besetzung zu verwenden. Wenn es keine gibt, verwende ich DirectCast, wenn ich der festen Überzeugung bin, dass eine Vererbungsbeziehung besteht. Wenn es eine Situation ist, in der ich keine Ahnung habe, ob die Umwandlung erfolgreich sein sollte (Benutzereingabe -> Ganzzahlen zum Beispiel), verwende ich TryCast, um etwas Freundlicheres zu tun, als dem Benutzer eine Ausnahme zuzuweisen.
Eine Sache, die ich nicht abschütteln kann, ist, dass ich ToString anstelle von CStr verwende, aber angeblich ist Cstr schneller.
Ich bevorzuge die folgende Syntax:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Hah, Sie können sagen, dass ich normalerweise Code in C # schreibe. 8)
Der Grund, warum ich TryCast bevorzuge, ist, dass Sie sich nicht mit dem Aufwand für Casting-Ausnahmen herumschlagen müssen. Ihre Besetzung ist entweder erfolgreich oder Ihre Variable wird auf null initialisiert, und Sie gehen entsprechend damit um.
.ToString()
. Ein Werttyp wie Integer kann nicht Nothing sein. In diesem Fall ist entweder CStr (Nummer) oder Nummer.ToString () sicher. Im allgemeinen Fall (nicht nur Werttypen) ist CStr (was auch immer) sicher, da es Nothing verarbeiten kann - das Ergebnis ist Nothing in der String-Variablen. TryCast ist sehr nützlich - nur nicht hier.
Benutzer Konrad Rudolph befürwortet DirectCast () in der Stapelüberlauffrage "Versteckte Funktionen von VB.NET" .
String
, ist es unwahrscheinlich, dass das OP eine Situation erörtert hat, in der DirectCast angemessen ist.
String
und ToString
, würde meine Beschwerde nicht zutreffen. Sie sollten sich nicht für DirectCast einsetzen, bis Sie das Thema von der allgemeinen KONVERTIERUNG eingegrenzt haben.
Laut Zertifizierungsprüfung sollten Sie Convert.ToXXX () nach Möglichkeit für einfache Konvertierungen verwenden, da es die Leistung besser optimiert als CXXX-Konvertierungen.
Ich erinnere mich einmal, dass der MSDN-Bibliotheksstatus CStr () verwendet hat, weil er schneller war. Ich weiß allerdings nicht, ob das stimmt.