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