.NET / C # - Converter char [] em string

407

Qual é a maneira correta de transformar um char[]em uma string?

O ToString()método de uma matriz de caracteres não funciona.

BuddyJoe
fonte

Respostas:

677
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);
Joel Coehoorn
fonte
12
Note que new string(null)produz String.Emptye não null ! Se você deseja manter null, você pode criar um método de extensão static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod
8
@ Skod: Como é impossível uma expressão "nova" retornar um valor que não seja uma instância de objeto, isso não deve surpreender ninguém.
Matti Virkkunen
@MattiVirkkunen: Lançar uma exceção também é uma coisa razoável a se fazer. Esse é o comportamento que eu teria adivinhado por passar nulo ao construtor de strings.
Charles Taylor
81

Use o construtor de string que aceita um caractere []

char[] c = ...;
string s = new string(c);
JaredPar
fonte
54
Se você fosse três minutos mais rápido, teria respondido antes que a pergunta fosse feita!
DCastenholz
1
Esqueça os minutos. São apenas 17 segundos. Minha resposta acima é a minha segunda resposta mais votada no site. Na verdade, estou aqui agora porque alguém acabou de votar novamente, quase 10 anos depois. E as duas respostas não são realmente diferente ... mas o meu foi postada 17 segundos mais rápido, e que significou uma diferença de 500 votação: /
Joel Coehoorn
35
char[] characters;
...
string s = new string(characters);
Austin Salonen
fonte
28

Uma outra maneira:

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"
Sêmen Miroshnichenko
fonte
string.Joinsó aceita em string[]vez dechar[]
sky91 2/17
@ sky91 não só, você pode usar String.Join <T> Método e qualquer T [] como parâmetro, T.ToString () será chamado
Semen Miroshnichenko
1
então você deve escrever string.Join<char>("_", chars)em vez destring.Join("_", chars)
sky91
2
O compilador faz isso automaticamente, pois o tipo chars é conhecido no tempo de compilação.
Semen Miroshnichenko
É estranho, porque eu recebo erro de compilação se eu não definir o tipo <char>
sky91
20
String mystring = new String(mychararray);
Shaun Rowland
fonte
15

Use o construtor de strings que aceita chararray como argumento, posição inicial e comprimento da matriz. A sintaxe é fornecida abaixo:

string charToString = new string(CharArray, 0, CharArray.Count());
Dilip Nannaware
fonte
Eu acho que é isso que eu estava procurando. Mas eu não conhecia nenhuma classe chamada CharArray. Será que você talvez quer dizer algo como: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ão é classe, apenas variável do tipo char []
Dilip Nannaware 17/04/19
13

Outra alternativa

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

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