.NET / C # - конвертировать char [] в строку


407

Как правильно превратить a char[]в строку?

ToString()Метод из массива символов не сделать трюк.

Ответы:


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

12
Обратите внимание, что new string(null)дает String.Emptyи нет null ! Если вы хотите сохранить null, вы можете сделать метод расширения static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod

8
@Skod: видя, что для «нового» выражения невозможно вернуть значение, отличное от экземпляра объекта, это никого не должно удивлять.
Матти Вирккунен

@MattiVirkkunen: Бросать исключение также разумно. Это поведение, которое я бы предположил для передачи null в конструктор строки.
Чарльз Тейлор

81

Используйте конструктор строки, который принимает символ []

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

54
Если бы только вы были на три минуты быстрее, вы бы ответили до того, как был задан вопрос!
DCastenholz

1
Забудь минуты. Это всего лишь 17 секунд. Мой ответ чуть выше - мой второй самый высоко оцененный ответ на сайте. На самом деле я здесь, потому что кто-то только что проголосовал снова, почти 10 лет спустя. И эти два ответа на самом деле ничем не отличаются ... но мой был опубликован на 17 секунд быстрее, и это означало разницу в 500 голосов: /
Джоэл Коухорн


28

Еще один способ:

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.Joinпринимает только string[]вместоchar[]
sky91

@ sky91 не только, вы можете использовать метод String.Join <T> и любой T [] в качестве параметра, будет вызван T.ToString ()
Семен Мирошниченко

1
тогда вы должны написать string.Join<char>("_", chars)вместоstring.Join("_", chars)
sky91

2
Компилятор делает это автоматически, так как тип chars известен во время компиляции.
Семен Мирошниченко

Это странно, потому что я получаю ошибку компиляции, если я не определяю тип <char>
sky91


15

Используйте строковый конструктор, который принимает chararray в качестве аргумента, начальную позицию и длину массива. Синтаксис приведен ниже:

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

Я думаю, это то, что я искал. Но я не знал ни одного класса с именем CharArray. Возможно, вы char[] charArray = new char[5] { 'a', 'b', 'c', '\0', '\0' }; string charsAsString = new string(charArray, 0, 3); // only want part of array.
Suncat2000

CharArray - это не класс, а переменная типа char []
Dilip Nannaware

13

Еще одна альтернатива

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

Debug.Assert( s.Equals( "Rock-&-Roll" ) );
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.