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

Respuestas:


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

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

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


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"

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


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

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" ) );
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.