.NET / C # - Convertit char [] en chaîne

407

Quelle est la bonne façon de transformer un char[]en une chaîne?

La ToString()méthode à partir d'un tableau de caractères ne fait pas l'affaire.

BuddyJoe
la source

Réponses:

677
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);
Joel Coehoorn
la source
12
Notez que les new string(null)rendements String.Emptyet non null ! Si vous souhaitez conserver null, vous pouvez créer une méthode d'extension static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod
8
@Skod: Étant donné qu'il est impossible pour une "nouvelle" expression de renvoyer une valeur autre qu'une instance d'objet, cela ne devrait surprendre personne.
Matti Virkkunen
@MattiVirkkunen: Lancer une exception est également une chose raisonnable à faire. C'est le comportement que j'aurais deviné en passant null au constructeur de chaîne.
Charles Taylor
81

Utilisez le constructeur de chaîne qui accepte un char []

char[] c = ...;
string s = new string(c);
JaredPar
la source
54
Si seulement vous aviez été trois minutes plus rapides, vous auriez répondu avant que la question ne soit posée!
DCastenholz
1
Oubliez les minutes. C'est juste 17 secondes. Ma réponse juste au-dessus est ma deuxième réponse la plus votée sur le site. En fait, je suis ici maintenant parce que quelqu'un vient de voter à nouveau, près de 10 ans plus tard. Et les deux réponses ne sont pas vraiment différentes ... mais la mienne a été publiée 17 secondes plus vite, et cela signifie une différence de 500 votes: /
Joel Coehoorn
35
char[] characters;
...
string s = new string(characters);
Austin Salonen
la source
28

Une autre façon:

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"
Semen Miroshnichenko
la source
string.Joinaccepte uniquement string[]au lieu dechar[]
sky91
@ sky91 non seulement, vous pouvez utiliser la méthode String.Join <T> et tout T [] comme paramètre, T.ToString () sera appelé
Semen Miroshnichenko
1
alors vous devriez écrire string.Join<char>("_", chars)au lieu destring.Join("_", chars)
sky91
2
Le compilateur le fait automatiquement car le type de caractères est connu au moment de la compilation.
Semen Miroshnichenko
C'est bizarre parce que j'obtiens une erreur de compilation si je ne définis pas le type <char>
sky91
20
String mystring = new String(mychararray);
Shaun Rowland
la source
15

Utilisez le constructeur de chaîne qui accepte le chararray comme argument, la position de départ et la longueur du tableau. La syntaxe est donnée ci-dessous:

string charToString = new string(CharArray, 0, CharArray.Count());
Dilip Nannaware
la source
Je pense que c'est ce que je cherchais. Mais je ne connaissais aucune classe nommée CharArray. Pensiez-vous peut-être à quelque chose comme:char[] charArray = new char[5] { 'a', 'b', 'c', '\0', '\0' }; string charsAsString = new string(charArray, 0, 3); // only want part of array.
Suncat2000
CharArray n'est pas une classe, juste une variable de type char []
Dilip Nannaware
13

Une autre alternative

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

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