Datentypkonvertierungen: CInt() vs. Convert.ToInt32() vs. Integer.Parse() vs. CType(X, Integer) sowie CStr() vs. X.ToString vs. CType(X, String)

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Datentypkonvertierungen: CInt() vs. Convert.ToInt32() vs. Integer.Parse() vs. CType(X, Integer) sowie CStr() vs. X.ToString vs. CType(X, String)

    Ich versuche derzeit zu verstehen, wie man am besten (schnellsten, schönsten, ordentlichsten, .NET-konformsten) Datentypkonvertierungen in Visual Basic vornimmt. Dazu habe ich mir natürlich Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen durchgelesen.

    So richtig sicher bin ich nun aber noch nicht, was ich verwenden soll.

    1. Fall: String nach Integer

    VB.NET-Quellcode

    1. Dim X As String = "1"
    2. Dim Y As Integer
    3. Y = CInt(X)
    4. Y = Convert.ToInt32(X)
    5. Y = Integer.Parse(X)
    6. Y = CType(X, Integer)

    In verlinktem Thread steht, dass CInt in diesem Fall nicht verwendet werden soll, da von String konvertiert wird. Ist hier Parse das einzig wahre? Oder sind CType bzw. Convert auch OK oder besser?

    2. Fall: Integer nach String

    VB.NET-Quellcode

    1. Dim X As Integer = 1
    2. Dim Y As String
    3. Y = CStr(X)
    4. Y = X.ToString
    5. Y = CType(X, String)

    Laut dem Thread soll hier wohl CStr am performantesten sein, weil der Integer konstant ist. Ist das richtig? Wenn er das nicht ist, weil ich z. B. Button1.Width abfrage, nehme ich dann CType oder ToString?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    für String->Integer würde ich Integer.Parse nehmen, weil das ist was passiert: Ein Text wird gelesen, und ein Integer draus gebildet.
    Übrigens gibts auch Integer.TryParse, falls man nicht sicher ist, ob aus dem Text ein Integer bildbar ist.
    Das Pärchen Parse/TryParse gibts auch für andere primitive Datentypen, wie Single, Double, Date, Timespan, IPAddress,...

    Cint(), Convert.XY, CType() sind so rumprobier-Funktionen, die alles mögliche annere auch nach Integer zu konvertieren versuchen.

    Um iwas nach String zu konvertieren kann man immer .ToString() nehmen, weil jedes Objekt erbt diese Methode (und überschreibt sie ggfs.).
    Ausser das Objekt ist Nothing, weil Nothing hat auch keine .ToString()-Methode.
    Man kann Nothing mit CStr() konvertieren - kommt "" raus.
    Wenn man das will.

    Aber hier gibts doch iwo ein recht ausführliches Tutorial zum Typen konvertierens - war das nicht von Artentus?
    Danke, Leute, das hilft mir weiter. Der Thread von @Artentus hat im Prinzip dasselbe Fazit wie das von @ErfinderDesRades genannte: Parse und ToString sind zu nehmen.

    Weiterhin habe ich das Tutorial so verstanden, dass CInt, CSng usw. nur die Kurzform von CType() sind. Und dass man CInt & Co. bei der Konvertierung von Zahl zu Zahl verwenden sollte.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Zu beachten wäre auch noch, dass ein .ToString von einem Integer-Enum den Wert des Enum-Bezeichners als Text zurückgibt, nicht den eigentlichen Wert.

    VB.NET-Quellcode

    1. Public Enum Werte As Integer
    2. Wert_A = 1
    3. Wert_B = 2
    4. Wert_C = 3
    5. End Enum
    6. Public WertStr As String = Werte.Wert_A.ToString
    7. 'Gibt Werte.Wert_A zurück
    8. Public WertInt_Str As String = CType(Werte.Wert_A, Integer).ToString
    9. 'Gibt 1 zurück
    @Marcus Gräfe Wenn Du aus einem String einen numerischen Wert machen willst und die Möglichkeit besteht, dass im String "Roullade mit Klößen" stehen könnte, nimm TryParse().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    oobdoo schrieb:

    Spricht etwas gegen IsNumeric?
    Der VisualBasic NameSpace.
    Wenn Du einen Integer haben willst, da aber ein Double drinne steht, bringt IsNumeric() nicht das gewünschte Resultat.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!