.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.

Buddy Jo
sumber

Jawaban:

677
char[] chars = {'a', ' ', 's', 't', 'r', 'i', 'n', 'g'};
string s = new string(chars);
Joel Coehoorn
sumber
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);
JaredPar
sumber
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
35
char[] characters;
...
string s = new string(characters);
Austin Salonen
sumber
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"
Semen Miroshnichenko
sumber
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
20
String mystring = new String(mychararray);
Shaun Rowland
sumber
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());
Dilip Nannaware
sumber
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" ) );
Michael J
sumber