.NET / C # - Konvertiert char [] in einen String

407

Was ist der richtige Weg, um aus a char[]einen String zu machen?

Die ToString()Methode aus einem Array von Zeichen reicht nicht aus.

BuddyJoe
quelle

Antworten:

677
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);
Joel Coehoorn
quelle
12
Beachten Sie, dass new string(null)Ausbeuten String.Emptyund nicht null ! Wenn Sie behalten möchten, nullkönnen Sie eine Erweiterungsmethode erstellen static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod
8
@Skod: Da es für einen "neuen" Ausdruck unmöglich ist, einen anderen Wert als eine Objektinstanz zurückzugeben, sollte dies niemanden überraschen.
Matti Virkkunen
@MattiVirkkunen: Eine Ausnahme auszulösen ist auch eine vernünftige Sache. Das ist das Verhalten, das ich vermutet hätte, wenn ich null an den String-Konstruktor übergeben hätte.
Charles Taylor
81

Verwenden Sie den Konstruktor der Zeichenfolge, die ein Zeichen akzeptiert []

char[] c = ...;
string s = new string(c);
JaredPar
quelle
54
Wenn Sie nur drei Minuten schneller wären, hätten Sie geantwortet, bevor die Frage gestellt wurde!
DCastenholz
1
Minuten vergessen. Es sind nur 17 Sekunden. Meine Antwort direkt oben ist meine zweithöchste Antwort auf der Website. Tatsächlich bin ich jetzt hier, weil jemand es gerade wieder gewählt hat, fast 10 Jahre später. Und die beiden Antworten sind nicht wirklich unterschiedlich ... aber meine wurde 17 Sekunden schneller gepostet, und das bedeutet einen Unterschied von 500 Stimmen: /
Joel Coehoorn
35
char[] characters;
...
string s = new string(characters);
Austin Salonen
quelle
28

Ein anderer Weg:

char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = string.Join("", chars);
//we get "a string"
// or for fun:
string s = string.Join("_", chars);
//we get "a_ _s_t_r_i_n_g"
Sperma Miroshnichenko
quelle
string.Joinakzeptiert nur string[]anstelle vonchar[]
sky91
@ sky91 nicht nur, Sie können String.Join <T> -Methode und jedes T [] als Parameter verwenden, T.ToString () wird aufgerufen
Semen Miroshnichenko
1
dann solltest du string.Join<char>("_", chars)stattstring.Join("_", chars)
sky91
2
Der Compiler tut dies automatisch, da der Zeichentyp zur Kompilierungszeit bekannt ist.
Sperma Miroshnichenko
Es ist seltsam, weil ich einen Kompilierungsfehler bekomme, wenn ich den Typ <char>
sky91
20
String mystring = new String(mychararray);
Shaun Rowland
quelle
15

Verwenden Sie den String-Konstruktor, der Chararray als Argument, Startposition und Länge des Arrays akzeptiert. Die Syntax ist unten angegeben:

string charToString = new string(CharArray, 0, CharArray.Count());
Dilip Nannaware
quelle
Ich denke, das habe ich gesucht. Aber ich kannte keine Klasse namens CharArray. char[] charArray = new char[5] { 'a', 'b', 'c', '\0', '\0' }; string charsAsString = new string(charArray, 0, 3); // only want part of array.
Meinten
CharArray ist keine Klasse, sondern nur eine Variable vom Typ char []
Dilip Nannaware
13

Eine andere Alternative

char[] c = { 'R', 'o', 'c', 'k', '-', '&', '-', 'R', 'o', 'l', 'l' };
string s = String.Concat( c );

Debug.Assert( s.Equals( "Rock-&-Roll" ) );
Michael J.
quelle