1. Tại sao cần chuyển đổi kiểu?
C# là một ngôn ngữ kiểu tĩnh nghiêm ngặt. Nếu máy tính có một “hộp” dành cho số, thì cố nhét text vào đó cũng giống như cố cắm dĩa vào cổng USB vậy. Compiler sẽ không tha cho bạn đâu! 😡
Nhưng mà, trong thực tế tụi mình hay phải làm việc với nhiều kiểu dữ liệu cùng lúc. Ví dụ, bạn có một chuỗi chứa số. Đó là lúc cần chuyển đổi (hay còn gọi là ép kiểu) dữ liệu.
Xem ví dụ nhé. Giả sử bạn muốn lưu số lượng người dùng:
int a = 1;
int b = "2";
int c = "ba";
Compiler sẽ bảo ngay: “Bạn nghĩ tôi là ai? Tôi không tự động chuyển chuỗi thành số được đâu, bạn phải làm rõ ràng cho tôi biết".
Trong C# có vài cách chuyển đổi, mỗi cách đều có ưu, nhược điểm và những cái bẫy riêng.
2. Chuyển int sang string
Trong công việc, tụi mình hay cần lấy chuỗi biểu diễn số: ví dụ để in ra màn hình, lưu vào file, gửi qua mạng, nối với text v.v. Trong C# có mấy cách làm việc này, mỗi cách tiện cho từng tình huống khác nhau.
Hàm ToString()
Đây là cách chính và phổ biến nhất:
int number = 42;
string str = number.ToString(); // str == "42"
ToString() chuyển số thành chuỗi với định dạng mặc định cho kiểu dữ liệu đó.
String interpolation ($"...")
Cách hiện đại, tiện để ghép chuỗi với biến:
int number = 42;
string str = $"Số: {number}";
String interpolation sẽ tự động gọi ToString() cho giá trị được chèn vào.
Bạn có thể ghép nhiều biến và thậm chí chỉ định định dạng:
int number = 42;
string str = $"{number:D5}"; // "00042" — năm chữ số với số 0 ở đầu
Nối với chuỗi rỗng
Cách cũ nhưng vẫn chạy tốt:
int number = 42;
string str = number + "";
Cách này chạy nhanh cho trường hợp đơn giản, nhưng đọc code sẽ không rõ ràng bằng.
3. Ép kiểu ngầm sang chuỗi
Như đã nói ở trên, các dev C# đã làm cho mọi biến, object, biểu thức trong C# đều có thể chuyển sang kiểu string.
Thậm chí, việc này sẽ tự động xảy ra khi bạn cộng kiểu string với kiểu khác. Ví dụ:
int a = 5;
string name = "Anya" + a; // name chứa chuỗi Anya5
int a = 5;
string city = a + "New York" + a; // city chứa chuỗi 5New York5
int number = 10;
string code = "Yo";
string message = "Hello! " + number + code; // message chứa chuỗi Hello! 10Yo
Cả ba ví dụ trên đều cộng biến kiểu int và string, kết quả luôn là kiểu string.
Ví dụ:
int a = 5;
string name = "1" + a; // name chứa chuỗi 15
int a = 5;
string city = a + "9" + a; // city chứa chuỗi 595
int number = 10;
string code = "10";
string message = "" + number + code; // message chứa chuỗi 1010
Phép cộng thực hiện từ trái sang phải, nên kết quả có thể hơi bất ngờ. Ví dụ:
int a = 5;
string name = a + a + "1" + a; // name chứa chuỗi 1015
Thứ tự thực hiện: ((a + a) + "1") + a
4. Chuyển chuỗi thành số
Để chuyển số thành chuỗi trong C#, chỉ cần cộng nó với chuỗi rỗng:
string str = "" + số;
Thế còn muốn chuyển chuỗi thành số thì sao? Không phải chuỗi nào cũng chuyển thành số được đâu. Nhưng nếu chuỗi chỉ gồm số thì vẫn làm được. Kiểu int có hàm đặc biệt Parse() để làm việc này.
Lệnh này như sau:
int x = int.Parse("chuỗi")
Ở đây int x — là khai báo biến nguyên x, còn chuỗi — là số được ghi dưới dạng chuỗi (chuỗi chỉ gồm số).
Ví dụ:
string str = "123";
int number1 = int.Parse(str); // number1 chứa số 123;
int number2 = int.Parse("321"); // number2 chứa số 321
int number3 = int.Parse("321" + 0); // number3 chứa số 3210
int number4 = "321"; // Không biên dịch được: biến kiểu int, giá trị kiểu string
Với số âm cũng được luôn: hàm int.Parse() rất thông minh.
GO TO FULL VERSION