Frage

Sind diese alle gleich?Unter welchen Umständen sollte ich das eine dem anderen vorziehen?

  • var.ToString()

  • CStr(var)

  • CType(var, String)

  • DirectCast(var, String)


BEARBEITEN:Vorschlag von Nicht ich

  • TryCast(var, String)
War es hilfreich?

Lösung

Diese unterscheiden sich alle geringfügig und haben im Allgemeinen eine akzeptable Verwendung.

  • var.ToString() gibt Ihnen die String-Darstellung eines Objekts, unabhängig davon, um welchen Typ es sich handelt.Verwenden Sie dies, wenn var ist noch keine Zeichenfolge.
  • CStr(var) ist der VB-String-Umwandlungsoperator.Ich bin kein VB-Typ, daher würde ich vorschlagen, es zu vermeiden, aber es wird nicht wirklich schaden.Ich denke, es ist im Grunde dasselbe wie CType.
  • CType(var, String) konvertiert den angegebenen Typ mithilfe aller bereitgestellten Konvertierungsoperatoren in einen String.
  • DirectCast(var, String) wird verwendet, um ein Objekt in einen String umzuwandeln.Wenn Sie wissen, dass eine Objektvariable tatsächlich eine Zeichenfolge ist, verwenden Sie diese.Das ist das Gleiche wie (string)var in C#.
  • TryCast (wie von @ erwähntNicht ich) ist wie DirectCast, aber es wird wiederkommen Nothing wenn die Variable nicht in eine Zeichenfolge konvertiert werden kann, anstatt eine Ausnahme auszulösen.Das ist das Gleiche wie var as string in C#.Der TryCast Die Seite auf MSDN bietet ebenfalls einen guten Vergleich.

Andere Tipps

Cstr() wird für eine bessere Leistung inline kompiliert.

CType ermöglicht Umwandlungen zwischen Typen, wenn ein Konvertierungsoperator definiert ist

ToString() Zwischen Basistyp und String wird eine Ausnahme ausgelöst, wenn die Konvertierung nicht möglich ist.

TryParse() Von der Saite bis zur Basis typeif möglich, andernfalls wird false zurückgegeben

DirectCast Wird verwendet, wenn die Typen durch Vererbung miteinander verbunden sind oder eine gemeinsame Schnittstelle haben. Löst eine Ausnahme aus, wenn die Umwandlung nicht möglich ist. trycast wird in diesem Fall nichts zurückgeben

Ich bevorzuge die folgende Syntax:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

Hah, man merkt, dass ich normalerweise Code in C# schreibe.8)

Der Grund, warum ich TryCast bevorzuge, ist, dass Sie sich nicht mit dem Aufwand für das Casting von Ausnahmen herumschlagen müssen.Entweder ist Ihre Umwandlung erfolgreich, oder Ihre Variable wird auf Null initialisiert, und Sie behandeln dies entsprechend.

MSDN scheint darauf hinzudeuten, dass die Cxxx-Umwandlungen für bestimmte Typen die Leistung in VB .NET verbessern können, da sie in Inline-Code konvertiert werden.Aus irgendeinem Grund deutet es auch darauf hin DirectCast im Gegensatz zu CType in bestimmten Fällen (in der Dokumentation heißt es, dass es sich um eine Vererbungsbeziehung handelt);Ich glaube, das bedeutet, dass die Integrität der Besetzung zur Kompilierungszeit überprüft wird und Optimierungen angewendet werden können, während CType immer die VB-Laufzeit verwendet.)

Wenn ich VB .NET-Code schreibe, hängt das, was ich verwende, davon ab, was ich tue.Wenn es sich um Prototyp-Code handelt, den ich wegwerfe, verwende ich alles, was ich gerade eingebe.Wenn es mir ernst ist mit dem Code, versuche ich, eine Cxxx-Besetzung zu verwenden.Wenn keines vorhanden ist, verwende ich DirectCast, wenn ich der begründeten Annahme bin, dass eine Vererbungsbeziehung besteht.Wenn es sich um eine Situation handelt, in der ich nicht weiß, ob die Umwandlung erfolgreich sein soll (z. B. Benutzereingaben -> Ganzzahlen), verwende ich TryCast, um etwas Freundlicheres zu tun, als dem Benutzer eine Ausnahme zuzuwerfen.

Eine Sache, die ich nicht loswerden kann, ist, dass ich eher ToString anstelle von CStr verwende, aber angeblich ist Cstr schneller.

Laut Zertifizierungsprüfung sollten Sie Convert.ToXXX() wann immer möglich für einfache Konvertierungen verwenden, da es die Leistung besser optimiert als CXXX-Konvertierungen.

Ich erinnere mich, dass ich einmal in der MSDN-Bibliothek den Status „CStr()“ verwendet habe, weil es schneller war.Ich weiß allerdings nicht, ob das wahr ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top