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

407

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

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

BuddyJoe
источник

Ответы:

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);
JaredPar
источник
54
Если бы только вы были на три минуты быстрее, вы бы ответили до того, как был задан вопрос!
DCastenholz
1
Забудь минуты. Это всего лишь 17 секунд. Мой ответ чуть выше - мой второй самый высоко оцененный ответ на сайте. На самом деле я здесь, потому что кто-то только что проголосовал снова, почти 10 лет спустя. И эти два ответа на самом деле ничем не отличаются ... но мой был опубликован на 17 секунд быстрее, и это означало разницу в 500 голосов: /
Джоэл Коухорн
35
char[] characters;
...
string s = new string(characters);
Остин Салонен
источник
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
20
String mystring = new String(mychararray);
Шон Роуленд
источник
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" ) );
Майкл Дж
источник