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

Odpowiedzi:


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

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

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


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"

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


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

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" ) );
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.