2010-04-12 13 views
10
 char character = 'c'; 
     string str = null; 
     str = character.ToString();//this is ok 

     char[] arrayChar = { 'a', 'b', 'c', 'd' }; 
     string str2 = null; 
     str2 = string.Copy(arrayChar.ToString());//this is not ok 
     str2 = arrayChar.ToString();//this is not ok. 

Próbuję przekonwertować tablicę znaków na ciąg znaków, ale ostatnie dwie próby nie działają. Inne znalezione źródło i muszą utworzyć nowy typ łańcucha, ale nie wiem dlaczego. Czy ktoś może mi dać małe wyjaśnienie, dzięki.C# przypisać char i char array do napisu?

Odpowiedz

25

Musisz skonstruować nowy ciąg.

Wykonanie arrayChar.ToString() wywołuje metodę "ToString" dla typu char[], która nie jest przeciążona w celu skonstruowania ciągu znaków, ale raczej do skonstruowania łańcucha, który określa, że ​​typ jest tablicą znaków. To nie da ci pożądanego zachowania.

Konstruowanie nowego ciągu znaków za pośrednictwem str2 = new string(arrayChar); zapewnia jednak pożądane zachowanie.

Problem polega na tym, że w C# (w przeciwieństwie do C++) łańcuch nie jest taki sam jak tablica znaków. Są to dwa wyraźnie różne typy (chociaż mogą reprezentować te same dane). Ciągi mogą być wyliczane jako znaki (narzędzia String IEnumerable<Char>), ale nie jest, jeśli chodzi o CLR, ten sam typ co znaki. Wykonanie konwersji wymaga konwersji kodu między tymi dwoma - i konstruktor łańcuchów udostępnia ten mechanizm.

+0

teraz jest to odpowiedź, której szukam. dziękuję Reed. – Bopha

+0

Właściwie w C++ "ciąg znaków" nie jest "tablicą znaków". Proszę być nieco bardziej precyzyjnym. W C++ "ciąg" jest klasą (std :: string, std :: wstring), która tworzy _ ** niejawną konwersję ** construtor_ z tablicy znaków. To znacznie różni się od "bycia tablicą znaków". Lub, jeśli mówisz o 'c-string', jest to pojęcie języka C w postaci łańcuchów zakodowanych jako tablica znaków zakończona znakiem NUL. C. Nie C++. Inne języki. Poza tym wszystko w porządku. – quetzalcoatl

7
new string(arrayChar); 
+0

proszę wyjaśnić, dlaczego trzeba utworzyć nowy ciąg znaków? – Bopha

+0

Czy to nie jest to, co chcesz zrobić? –

+1

@Bopha: Próbowałem to wyjaśnić w mojej odpowiedzi dla ciebie - czy to pomaga? @Andrey: +1 za bycie poprawną odpowiedzią :) –