.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.

Antworten:


677
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);

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);

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


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"

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


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());

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" ) );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.