Mein Problem dabei ist, dass Sie die Typensicherheit verlieren. myInt könnte alles sein. Nichts hier sagt, nimm eine ganze Zahl und konvertiere sie in einen String. myInt kann ein Objekt sein und ein Objekt kann nicht in eine Zeichenfolge konvertiert werden. Das ist zur Kompilierungszeit bekannt, würde aber nicht einmal eine Laufzeitausnahme auslösen, sondern nur schlechte Daten zulassen.
Timothy Gonzalez
3
@TimothyGonzalez Das ist ein Randfall, wenn Sie .ToString () aufrufen, normalerweise, weil Sie es als Zeichenfolge benötigen und es eine Zeichenfolge sein kann.
EpicKip
35
@nfgallimore Es ist kein gültiger Randfall, es ist in dieser Situation nicht einmal ein Randfall. Das OP gab an, dass er einen int-Typ hatte, den er in einen String konvertieren wollte. Wenn es sich um einen int-Typ handelt, ist der Wert schlicht und einfach ein int. Der Compiler wird sicherstellen, dass dies der Fall ist. Ich bin mir nicht mal sicher, wie du mit dieser Tangente umgegangen bist. Das OP fragte nicht, wie sichergestellt werden sollte, dass eine zufällige Referenz eine Ganzzahl ist, und konvertierte sie dann in eine Zeichenfolge. Vielleicht haben Sie in diesem Fall einen Punkt, aber das ist nicht der Fall.
AaronM
1
Diese Lösung löst eine Ausnahme für nullWerte aus.
Mehdi Dehghani
18
Die Kommentare zu dieser Antwort sind lächerlich.
524
string s = i.ToString();string s =Convert.ToString(i);string s =string.Format("{0}", i);string s = $"{i}";string s =""+ i;string s =string.Empty+ i;string s =newStringBuilder().Append(i).ToString();
auch Sie können dies tunstring count = "" + intCount;
Dion Dirza
2
Sind alle diese Lösungen gleich effizient? Ich würde mir vorstellen, dass i.ToString () unnötiges Boxen des int macht, aber vielleicht ist das trotzdem optimiert.
Stephen Holt
43
.ToString()ist der effizienteste Weg, um die Konvertierung durchzuführen. Alle anderen hier vorgestellten Methoden werden schließlich .ToString()trotzdem aufgerufen .
Xavier Poinas
6
Ich bin etwas verunsichert darüber, dass Sie die Variable immer wieder neu deklarierens
thecoshman
1
@XavierPoinas Während sie möglicherweise "ToString ()" aufrufen, hängt es etwas davon ab, was Sie damit vorhaben, welches das effizienteste ist. string s = "xyz" + i;erstellt einen neuen "xyz" -String - erstellt den neuen String, der Ihre Ganzzahl enthält; und erstellen Sie dann eine dritte Zeichenfolge, die die 2 verketteten enthält. string.Format("xyz{0}", i);Auf der anderen Seite können nur 2 Zeichenfolgen erzeugt werden, da sie inline verkettet werden. Diese Leistung wird deutlicher, wenn die Saiten länger werden.
UKMonkey
32
Nur für den Fall, dass Sie die binäre Darstellung möchten und immer noch von der Party der letzten Nächte betrunken sind:
privatestaticstringByteToString(intvalue){StringBuilder builder =newStringBuilder(sizeof(byte)*8);BitArray[] bitArrays =BitConverter.GetBytes(value).Reverse().Select(b =>newBitArray(new[]{b})).ToArray();foreach(bool bit in bitArrays.SelectMany(bitArray => bitArray.Cast<bool>().Reverse())){
builder.Append(bit ?'1':'0');}return builder.ToString();}
Hinweis: Etwas über den nicht guten Umgang mit Endianness ...
Bearbeiten: Wenn es Ihnen nichts ausmacht, ein wenig Speicher für die Geschwindigkeit zu opfern, können Sie unten ein Array mit vorberechneten Zeichenfolgenwerten generieren:
staticvoidOutputIntegerStringRepresentations(){Console.WriteLine("private static string[] integerAsDecimal = new [] {");for(int i =int.MinValue; i <int.MaxValue; i++){Console.WriteLine("\t\"{0}\",", i);}Console.WriteLine("\t\"{0}\"",int.MaxValue);Console.WriteLine("}");}
Nach der Antwort von @ Xavier finden Sie hier eine Seite, auf der Vergleiche zwischen verschiedenen Methoden für die Konvertierung von 100 Iterationen auf 21.474.836 Iterationen durchgeführt werden.
Es scheint so ziemlich eine Verbindung zwischen:
int someInt =0;
someInt.ToString();//this was fastest half the time//andConvert.ToString(someInt);//this was the fastest the other half the time
In keiner der Antworten wurde erwähnt, dass die ToString()Methode auf ganzzahlige Ausdrücke angewendet werden kann
Debug.Assert((1000*1000).ToString()=="1000000");
sogar zu ganzzahligen Literalen
Debug.Assert(256.ToString("X")=="100");
Obwohl solche ganzzahligen Literale oft als schlechter Codierungsstil ( magische Zahlen ) angesehen werden, kann es Fälle geben, in denen diese Funktion nützlich ist ...
Diese Antwort wurde in der Warteschlange für Überprüfungen von geringer Qualität angezeigt, vermutlich weil Sie den Code nicht erklärt haben. Wenn Sie es erklären (in Ihrer Antwort), erhalten Sie mit größerer Wahrscheinlichkeit mehr positive Stimmen - und der Fragesteller lernt tatsächlich etwas!
Der Kerl mit dem Hut
5
@TheGuywithTheHat Sie werden feststellen, dass keine der Antworten hier eine Erklärung des Codes enthält, insbesondere nicht alle Codebeispiele in dieser hoch bewerteten Antwort , da es offensichtlich ist, was sie alle tun müssen: ein int in einen String konvertieren. Ehrlich gesagt brauchen wir nichts anderes als die akzeptierte Antwort - i.ToString- der Rest ist nur der Vollständigkeit halber und zum Spaß hier.
nmclean
2
Das Fehlen einer Erklärung in anderen Antworten bedeutet nicht, dass allen Antworten eine Erklärung fehlen sollte. Der einzige Grund, warum ich nur diese spezielle Antwort kommentiert habe, ist, dass ich sie in der Überprüfungswarteschlange von geringer Qualität gesehen habe.
Der Kerl mit dem Hut
@TheGuywithTheHat Ich habe nicht vorgeschlagen, dass meine Antwort unvollständig sein kann, weil andere es sind; Ich sage, keiner von ihnen (einschließlich dieser) ist es, weil die Absicht im Kontext dieser Frage offensichtlich ist.
nmclean
2
@reggaeguitar Es ist meistens eine Scherzantwort, wir haben absichtlich immer mehr undurchsichtige Wege hinzugefügt, um eine der grundlegendsten Aufgaben zu erledigen. Für Ihre Frage wäre der Vorteil dieser Methode, wenn Sie die Typen nicht im Voraus kennen würden - statt typeof(int)und typeof(string)Sie könnten Typvariablen haben und sie würde einen geeigneten Konverter finden und verwenden, wann immer einer existiert.
null
Werte aus.quelle
string count = "" + intCount;
.ToString()
ist der effizienteste Weg, um die Konvertierung durchzuführen. Alle anderen hier vorgestellten Methoden werden schließlich.ToString()
trotzdem aufgerufen .s
string s = "xyz" + i;
erstellt einen neuen "xyz" -String - erstellt den neuen String, der Ihre Ganzzahl enthält; und erstellen Sie dann eine dritte Zeichenfolge, die die 2 verketteten enthält.string.Format("xyz{0}", i);
Auf der anderen Seite können nur 2 Zeichenfolgen erzeugt werden, da sie inline verkettet werden. Diese Leistung wird deutlicher, wenn die Saiten länger werden.Nur für den Fall, dass Sie die binäre Darstellung möchten und immer noch von der Party der letzten Nächte betrunken sind:
Hinweis: Etwas über den nicht guten Umgang mit Endianness ...
Bearbeiten: Wenn es Ihnen nichts ausmacht, ein wenig Speicher für die Geschwindigkeit zu opfern, können Sie unten ein Array mit vorberechneten Zeichenfolgenwerten generieren:
quelle
quelle
Die ToString-Methode eines Objekts soll eine Zeichenfolgendarstellung dieses Objekts zurückgeben.
quelle
Nach der Antwort von @ Xavier finden Sie hier eine Seite, auf der Vergleiche zwischen verschiedenen Methoden für die Konvertierung von 100 Iterationen auf 21.474.836 Iterationen durchgeführt werden.
Es scheint so ziemlich eine Verbindung zwischen:
quelle
Unter bestimmten Umständen müssen Sie nicht verwenden
ToString()
quelle
oder:
quelle
In keiner der Antworten wurde erwähnt, dass die
ToString()
Methode auf ganzzahlige Ausdrücke angewendet werden kannsogar zu ganzzahligen Literalen
Obwohl solche ganzzahligen Literale oft als schlechter Codierungsstil ( magische Zahlen ) angesehen werden, kann es Fälle geben, in denen diese Funktion nützlich ist ...
quelle
quelle
i.ToString
- der Rest ist nur der Vollständigkeit halber und zum Spaß hier.typeof(int)
undtypeof(string)
Sie könnten Typvariablen haben und sie würde einen geeigneten Konverter finden und verwenden, wann immer einer existiert.und Sie können schöne Dinge tun wie:
Das Ergebnis wird sein:
quelle