.NET / C # - Konwertuj char [] na string

406

Jaki jest właściwy sposób, aby zamienić a char[]w ciąg?

ToString()Metoda z tablicy znaków nie załatwi.

BuddyJoe
źródło

Odpowiedzi:

676
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);
Joel Coehoorn
źródło
12
Zauważ, że new string(null)plony, String.Emptya nie null ! Jeśli chcesz zachować null, możesz wykonać metodę rozszerzenia static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod,
8
@ Skod: Widząc, że „nowe” wyrażenie nie może zwrócić wartości innej niż instancja obiektu, nie powinno to nikogo dziwić.
Matti Virkkunen,
@MattiVirkkunen: Zgłaszanie wyjątku jest również rozsądnym posunięciem. Takie zachowanie przypuszczałbym, gdy przekażę wartość null konstruktorowi łańcucha.
Charles Taylor
81

Użyj konstruktora ciągu znaków, który akceptuje char []

char[] c = ...;
string s = new string(c);
JaredPar
źródło
54
Gdybyś był tylko trzy minuty szybszy, odpowiedziałbyś na to, zanim pytanie zostanie zadane!
DCastenholz
1
Zapomnij o minutach. To tylko 17 sekund. Moja odpowiedź powyżej jest moją drugą najwyżej ocenioną odpowiedzią na stronie. W rzeczywistości jestem tu teraz, ponieważ ktoś właśnie głosował ponownie, prawie 10 lat później. I dwie odpowiedzi tak naprawdę nie są różne ... ale moja została opublikowana 17 sekund szybciej, a to oznaczało różnicę 500 głosów: /
Joel Coehoorn
35
char[] characters;
...
string s = new string(characters);
Austin Salonen
źródło
28

Jeszcze jeden sposób:

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"
Nasienie Miroshnichenko
źródło
string.Joinakceptuje tylko string[]zamiastchar[]
sky91
@ sky91 nie tylko możesz użyć metody String.Join <T> i dowolnego T [] jako parametru, zostanie wywołana T.ToString ()
Semen Miroshnichenko
1
wtedy powinieneś napisać string.Join<char>("_", chars)zamiaststring.Join("_", chars)
sky91
2
Kompilator robi to automatycznie, ponieważ typ znaków jest znany w czasie kompilacji.
Semen Miroshnichenko
Jest to dziwne, ponieważ otrzymuję błąd kompilacji, jeśli nie definiują typ <char>
sky91
20
String mystring = new String(mychararray);
Shaun Rowland
źródło
15

Użyj konstruktora ciągów, który przyjmuje argument chararray jako argument, pozycję początkową i długość tablicy. Składnia jest podana poniżej:

string charToString = new string(CharArray, 0, CharArray.Count());
Dilip Nannaware
źródło
Myślę, że tego właśnie szukałem. Ale nie znałem żadnej klasy o nazwie CharArray. Czy miałeś na myśli coś takiego:char[] charArray = new char[5] { 'a', 'b', 'c', '\0', '\0' }; string charsAsString = new string(charArray, 0, 3); // only want part of array.
Suncat2000 17.04.19
CharArray nie jest klasą, tylko zmienna typu char []
Dilip Nannaware 17.04.19
13

Kolejna alternatywa

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

Debug.Assert( s.Equals( "Rock-&-Roll" ) );
Michael J.
źródło