.NET / C # - Перетворити char [] в рядок


407

Який правильний спосіб перетворити 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); }.
Шкода

8
@Skod: Бачачи, що "новий" вираз неможливо повернути значення, відмінне від об'єкта, це не повинно нікого здивувати.
Матті Вірккунен

@MattiVirkkunen: Кидати виняток - це теж розумна річ. Ось така поведінка я б здогадався за передачу нуля конструктору струн.
Чарльз Тейлор

81

Використовуйте конструктор рядка, який приймає знак char]

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
Компілятор робить це автоматично, оскільки тип символів відомий під час компіляції.
Семен Мірошниченко

Це дивно, тому що я отримую помилку компіляції, якщо не визначаю тип <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 []
Діліп Наннавер

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.