.NET / C # - Konversi char [] ke string


407

Apa cara yang tepat untuk mengubah char[]sebuah string?

The ToString()metode dari sebuah array karakter tidak melakukan trik.

Jawaban:


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

12
Perhatikan bahwa new string(null)hasil String.Emptydan bukan null ! Jika ingin tetap null, Anda dapat membuat metode ekstensi static string ToStringSafe(this char[] buf) { return buf == null ? null : new string(buf); }.
Skod

8
@ Skod: Melihat bahwa tidak mungkin untuk ekspresi "baru" untuk mengembalikan nilai selain instance objek, yang seharusnya tidak mengejutkan siapa pun.
Matti Virkkunen

@MattiVirkkunen: Melempar pengecualian juga merupakan hal yang wajar untuk dilakukan. Itulah perilaku yang saya duga untuk melewatkan null ke konstruktor string.
Charles Taylor

81

Gunakan konstruktor string yang menerima karakter []

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

54
Andai saja Anda tiga menit lebih cepat, Anda akan menjawab sebelum pertanyaan diajukan!
DCastenholz

1
Lupakan menit. Hanya 17 detik. Jawaban saya tepat di atas adalah jawaban pilihan tertinggi saya yang kedua di situs. Sebenarnya saya ada di sini sekarang karena seseorang baru saja memilihnya, hampir 10 tahun kemudian. Dan kedua jawaban itu tidak benar-benar berbeda ... tetapi jawaban saya diposting 17 detik lebih cepat, dan itu berarti perbedaan 500 suara: /
Joel Coehoorn


28

Satu cara lain:

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.Joinhanya menerima string[]alih-alihchar[]
sky91

@ sky91 tidak hanya, Anda dapat menggunakan String.Join <T> Metode dan setiap T [] sebagai parameter, T.ToString () akan dipanggil
Semen Miroshnichenko

1
maka Anda harus menulis string.Join<char>("_", chars)bukannyastring.Join("_", chars)
sky91

2
Compiler melakukannya secara otomatis karena tipe karakter dikenal pada waktu kompilasi.
Semen Miroshnichenko

Aneh karena saya mendapatkan kesalahan kompilasi jika saya tidak mendefinisikan tipe <char>
sky91


15

Gunakan konstruktor string yang menerima chararray sebagai argumen, posisi awal dan panjang array. Sintaks diberikan di bawah ini:

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

Saya pikir itulah yang saya cari. Tapi saya tidak tahu ada kelas bernama CharArray. Apakah Anda mungkin berarti sesuatu seperti:char[] charArray = new char[5] { 'a', 'b', 'c', '\0', '\0' }; string charsAsString = new string(charArray, 0, 3); // only want part of array.
Suncat2000

CharArray bukan kelas, hanya variabel tipe char []
Dilip Nannaware

13

Alternatif lain

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

Debug.Assert( s.Equals( "Rock-&-Roll" ) );
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.