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

Réponses:


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

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

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


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"

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


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

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" ) );
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.