2013-08-20 53 views
8

Tôi đang cố gắng để biến một số mã VB.NET thành C# và tìm thấy điều thú vị này. Thêm hai ký tự trả về các kết quả khác nhau trong VB.NET và C#.Trong C# lý do tại sao (char) (1) + (char) (2) kết quả trong int 3

VB.NET-lợi nhuận chuỗi

Chr(1) & Chr(2) = " " 

C#-lợi nhuận int

(char)(1) + char(2) = 3 

Làm thế nào tôi có thể thêm (concatenate) hai ký tự trong C#?

+0

Bạn có nghĩa là ghép nối? – Paparazzi

+0

sửa tôi nếu tôi sai - C# và java char và int arr cùng kích thước & 0001 + 0010 = 0011 (3). –

+0

@Blam - yes Concatenate – SarkarG

Trả lời

15

Trong C# char is a 16-bit numeric type, vì vậy + có nghĩa là bổ sung, không nối. Do đó, khi bạn thêm ab, bạn nhận được a+b. Hơn nữa, kết quả của việc bổ sung này là int (see a quick demo).

Nếu bằng cách "thêm hai ký tự", nghĩa là "nối", chuyển đổi chúng thành chuỗi trước khi áp dụng toán tử + sẽ là một tùy chọn. Một lựa chọn khác sẽ được sử dụng string.Format, như thế này:

string res = string.Format("{0}{1}", charA, charB); 
+0

+1 Đáng buồn là bạn đã bỏ qua phần thú vị nhất ... Tại sao trong C# nhiều hoạt động upcast để int :-) – xanatos

+0

Vâng, bạn vẫn cần phải trả lời câu hỏi: P –

+0

Ahaa ... Bây giờ tôi đã nhận nó. Đã thử tất cả các câu trả lời được đề cập ở đây và 'string.Format' có vẻ là cách làm gọn gàng nhất. Ngoài ra câu trả lời từ xanatos và Corak là tốt, nhưng nó có thể gây nhầm lẫn cho đội trong tương lai. – SarkarG

6

Bằng cách thêm vào một chuỗi rỗng bạn có thể buộc "chuyển đổi" của char để string ... Vì vậy

string res = "" + (char)65 + (char)66; // AB 

(về mặt kỹ thuật nó isn' Trình biên dịch biết rằng khi bạn thêm vào một string nó phải làm một số phép thuật ... Nếu bạn thử thêm null vào một chuỗi, nó xem xét null là một chuỗi rỗng, nếu bạn thử thêm string nó a string.Concat và tôi f bạn hãy thử thêm bất cứ thứ gì nó một .ToString() trên thành viên không theo chuỗi và sau đó string.Concat)

0

(char) (1) có giá trị ascii trong tổng số 1 và (char) (2) giá trị ascii của 2

vì vậy giá trị ascii là 1 + 2 (tức là (char) 1 + (char) 2) sẽ bằng 3.

nếu bạn làm: "2" + "1" điều này sẽ cung cấp cho bạn "21" (bạn không nên sử dụng điều này để tham gia chuỗi, thực hành xấu)

nếu bạn làm: '2' + '1', giá trị int là 99, giá trị ascii là 2 (là 50) + giá trị ascii là 1 (là 49).

+0

Tại sao thực hành không tốt? – Arijoon

0

Câu trả lời hay nhất là trong các nhận xét vì vậy tôi muốn nâng cao câu trả lời ở đây để có câu trả lời đúng. Với tín dụng đầy đủ sẽ đến @Jeow Li Huan:

string res = string.Concat(charA, charB); 
Các vấn đề liên quan