2010-04-12 51 views
10
 char character = 'c'; 
     string str = null; 
     str = character.ToString();//this is ok 

     char[] arrayChar = { 'a', 'b', 'c', 'd' }; 
     string str2 = null; 
     str2 = string.Copy(arrayChar.ToString());//this is not ok 
     str2 = arrayChar.ToString();//this is not ok. 

Tôi đang cố chuyển đổi mảng char thành chuỗi, nhưng hai lần thử cuối cùng không hoạt động. Nguồn khác tôi tìm thấy và họ phải tạo loại chuỗi mới, nhưng tôi không biết tại sao. Ai đó có thể cho tôi chút giải thích, cảm ơn.C# gán char và mảng char cho chuỗi?

Trả lời

25

Bạn cần tạo chuỗi mới.

Làm arrayChar.ToString() gọi phương thức "ToString" cho loại char[], không bị quá tải để tạo chuỗi ký tự, mà là để tạo chuỗi chỉ định loại đó là một mảng ký tự. Điều này sẽ không cho bạn hành vi mà bạn mong muốn.

Xây dựng một chuỗi mới, qua str2 = new string(arrayChar);, tuy nhiên, sẽ cung cấp cho bạn hành vi mà bạn mong muốn.

Vấn đề ở chỗ, trong C# (không giống như C++), một chuỗi không giống như một mảng ký tự. Đây là hai loại khác nhau rõ ràng (mặc dù chúng có thể đại diện cho cùng một dữ liệu đó). Các chuỗi có thể được liệt kê dưới dạng các ký tự (Chuỗi thực hiện IEnumerable<Char>), nhưng không phải, theo như CLR có liên quan, cùng loại với các ký tự. Thực hiện chuyển đổi yêu cầu mã để chuyển đổi giữa hai - và hàm tạo chuỗi cung cấp cơ chế này.

+0

bây giờ là câu trả lời tôi đang tìm kiếm. cảm ơn Reed. – Bopha

+0

Thực ra, trong C++, "chuỗi" không phải là "mảng ký tự". Xin hãy chính xác hơn một chút. Trong C++ "string" là một lớp (std :: string, std :: wstring) mà _happens có một chuyển đổi ** implicit ** construtor_ từ một mảng ký tự. Điều này khác xa so với "là một mảng char". Hoặc, nếu bạn đã nói về một 'c-string', thì đó là một khái niệm C-ngôn ngữ của các chuỗi được mã hóa thành mảng ký tự null kết thúc. C. Không phải C++. Ngôn ngữ khác nhau. Ngoài ra, tất cả đều ổn. – quetzalcoatl

7
new string(arrayChar); 
+0

để giải thích lý do tại sao phải tạo chuỗi mới? – Bopha

+0

Đó không phải là điều bạn muốn làm sao? –

+1

@ Bopha: Tôi đã cố giải thích điều này trong câu trả lời của tôi cho bạn - điều đó có giúp ích gì không? @Andrey: 1 cho là câu trả lời đúng, quá :) –