.NET / C # - Converti char [] in stringa


407

Qual è il modo corretto di trasformare a char[]in una stringa?

Il ToString()metodo da una serie di personaggi non fa il trucco.

Risposte:


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

12
Nota che new string(null)cede String.Emptye no null ! Se vuoi conservare null, puoi creare un metodo di estensione static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod,

8
@Skod: Visto che è impossibile per una "nuova" espressione restituire un valore diverso da un'istanza di oggetto, ciò non dovrebbe sorprendere nessuno.
Matti Virkkunen,

@MattiVirkkunen: anche lanciare un'eccezione è una cosa ragionevole da fare. Questo è il comportamento che avrei immaginato per passare null al costruttore di stringhe.
Charles Taylor,

81

Usa il costruttore della stringa che accetta un carattere []

char[] c = ...;
string s = new string(c);

54
Se solo fossi stato tre minuti più veloce, avresti risposto prima che la domanda fosse posta!
DCastenholz,

1
Dimentica i minuti. Sono solo 17 secondi. La mia risposta appena sopra è la mia seconda risposta più votata sul sito. In effetti sono qui ora perché qualcuno ha appena votato di nuovo, quasi 10 anni dopo. E le due risposte non sono affatto diverse ... ma la mia è stata pubblicata 17 secondi più velocemente, e questo significava una differenza di 500 voti: /
Joel Coehoorn


28

Un altro modo:

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.Joinaccetta solo string[]anzichéchar[]
sky91 il

@ sky91 non solo, puoi usare il metodo String.Join <T> e qualsiasi T [] come parametro, T.ToString () sarà chiamato
Semen Miroshnichenko

1
allora dovresti scrivere string.Join<char>("_", chars)invece distring.Join("_", chars)
sky91

2
Il compilatore lo fa automaticamente poiché il tipo di caratteri è noto al momento della compilazione.
Semen Miroshnichenko,

È strano perché ottengo un errore di compilazione se non definisco il tipo <char>
sky91


15

Utilizzare il costruttore di stringhe che accetta il chararray come argomento, posizione iniziale e lunghezza dell'array. La sintassi è riportata di seguito:

string charToString = new string(CharArray, 0, CharArray.Count());

Penso che sia quello che stavo cercando. Ma non conoscevo nessuna classe chiamata CharArray. Forse intendevi qualcosa del genere:char[] charArray = new char[5] { 'a', 'b', 'c', '\0', '\0' }; string charsAsString = new string(charArray, 0, 3); // only want part of array.
Suncat2000,

CharArray non è una classe, ma solo una variabile di tipo char []
Dilip Nannaware,

13

Un'altra alternativa

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

Debug.Assert( s.Equals( "Rock-&-Roll" ) );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.