C # назначить символ и массив символов в строку? - PullRequest
11 голосов
/ 12 апреля 2010
        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.

Я пытаюсь преобразовать массив символов в строку, но последние две попытки не работают. Другой источник, который я нашел, и они должны создать новый тип строки, но я не знаю почему. Может кто-нибудь дать мне небольшое объяснение, спасибо.

Ответы [ 3 ]

26 голосов
/ 12 апреля 2010

Вам нужно создать новую строку.

Выполнение arrayChar.ToString() вызывает метод "ToString" для типа char[], который не перегружен для создания строки символов, а для создания строки, указывающей, что тип является массивом символов. Это не даст вам того поведения, которое вы желаете.

Создание новой строки с помощью str2 = new string(arrayChar);, однако, даст вам желаемое поведение.

Проблема в том, что в C # (в отличие от C ++) строка не совпадает с массивом символов. Это два совершенно разных типа (даже если они могут представлять одни и те же данные). Строки могут быть перечислены как символы (String реализует IEnumerable<Char>), но, с точки зрения CLR, не является типом символов. Выполнение преобразования требует кода для преобразования между ними - и строковый конструктор предоставляет этот механизм.

8 голосов
/ 12 апреля 2010
new string(arrayChar);
0 голосов
/ 12 апреля 2010
...