.NET / C # - Convertir char [] a cadena

407

¿Cuál es la forma correcta de convertir un char[]en una cadena?

El ToString()método de una serie de caracteres no funciona.

BuddyJoe
fuente

Respuestas:

677
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);
Joel Coehoorn
fuente
12
Tenga en cuenta que new string(null)rinde String.Emptyy no null ! Si desea conservar null, puede hacer un método de extensión static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod
8
@Skod: Al ver que es imposible que una "nueva" expresión devuelva un valor que no sea una instancia de objeto, eso no debería sorprender a nadie.
Matti Virkkunen
@MattiVirkkunen: Lanzar una excepción también es algo razonable. Ese es el comportamiento que habría adivinado para pasar nulo al constructor de cadenas.
Charles Taylor
81

Utilice el constructor de cadena que acepta un char []

char[] c = ...;
string s = new string(c);
JaredPar
fuente
54
¡Si solo fueras tres minutos más rápido, habrías respondido antes de que se hiciera la pregunta!
DCastenholz
1
Olvida los minutos. Son solo 17 segundos. Mi respuesta justo arriba es mi segunda respuesta más votada en el sitio. De hecho, estoy aquí ahora porque alguien lo votó nuevamente, casi 10 años después. Y las dos respuestas no son realmente diferentes ... pero la mía se publicó 17 segundos más rápido, y eso significó una diferencia de 500 votos: /
Joel Coehoorn
35
char[] characters;
...
string s = new string(characters);
Austin Salonen
fuente
28

Otra forma:

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
fuente
string.Joinsolo acepta en string[]lugar dechar[]
sky91
@ sky91 no solo, puede usar el método String.Join <T> y cualquier T [] como parámetro, se llamará a T.ToString ()
Semen Miroshnichenko
1
entonces deberías escribir en string.Join<char>("_", chars)lugar destring.Join("_", chars)
sky91
2
El compilador lo hace automáticamente ya que el tipo de caracteres se conoce en tiempo de compilación.
Semen Miroshnichenko
Es extraño porque obtengo un error de compilación si no defino el tipo <char>
sky91
20
String mystring = new String(mychararray);
Shaun Rowland
fuente
15

Utilice el constructor de cadenas que acepta la matriz de caracteres como argumento, la posición inicial y la longitud de la matriz. La sintaxis se da a continuación:

string charToString = new string(CharArray, 0, CharArray.Count());
Dilip Nannaware
fuente
Creo que eso es lo que estaba buscando. Pero no sabía de ninguna clase llamada CharArray. Quizás quiso decir 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 no es clase, solo variable de tipo char []
Dilip Nannaware
13

Otra alternativa

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

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