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

Respostas:


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

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

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


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"

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


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

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" ) );
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.