Bài vừa rồi mình đã hướng dẫn các bạn về các kiểu dữ liệu trong C#. Những kiểu dữ liệu khác nhau có thể chứa những giá trị giống nhau. Vì thế trong một số trường hợp, ta cần đưa dữ liệu về dạng mong muốn, hay chuyển đổi sang một kiểu dữ liệu mới để dễ dàng thực hiện việc thao tác xử lý. Khi đó ta sẽ thực hiện việc ép kiểu dữ liệu (chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác), vậy có bao nhiêu cách ép dữ liệu, và ép như thế nào. Ta hãy cùng nhau tìm hiểu nhé !

Ép kiểu có hai loại sau:

  • Chuyển đổi kiểu ngầm định (implicit)
  • Chuyển đổi kiểu tường minh (explicit)

1. Chuyển đổi kiểu ngầm định (implicit)

Chuyển đổi ngầm định là việc chuyển đổi được thực hiện bởi trình biên dịch và chúng ta không cần tác động gì đến.

Việc chuyển đổi kiểu dữ liệu này được thực hiện khi muốn chuyển dữ kiệu nhỏ sang kiểu dữ liệu lớn hơn có nghĩa là kích thước kiểu dữ liệu trước phải nhỏ hơn kích thước của kiểu dữ liệu sau. Ví dụ: Chúng ta không thể chuyển kiểu dữ liệu float (4bytes) sang kiểu int (2bytes), vì ta thấy kích thước kiểu float lớn hơn so với kích thước kiểu int. Cho nên ta phải làm ngược lại:

 

Ví dụ
1
2
3
int abc = 20;
float xyz = abc;
// Chuyển kiểu ngầm định vì kiểu float có miền giá trị lớn hơn kiểu int

 

2. Chuyển đổi kiểu tường minh (explicit)

Chuyển đổi tường minh là việc chuyển đổi được thực hiện một cách rõ ràng bởi yêu cầu của người lập trình bằng cách sử dụng các hàm được định nghĩa trước hay cần một toán tử cast.

Trong chuyển đổi kiểu tường minh, ta có thể chuyển kiểu dữ liệu lớn về kiểu dữ liệu có kích thước nhỏ hơn mà không báo lỗi. Nếu kiểu dữ liệu vượt quá miền giá trị của kiểu dữ liệu ta muốn ép về thì chương trình sẽ tự động cắt bit sao cho phù hợp với khả năng chứa kiểu dữ liệu đó.

Cú pháp: (<kiểu dữ liệu>) <biến cần ép kiểu>

 

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace freetuts
 {
     class Program
      {
           static void Main(string[] args)
            {
                 int abc = 256;
                 //cast kiểu dữ liệu int thành kiểu dữ liệu byte
                 byte xyz = (byte)abc;
                 Console.WriteLine("abc = " + abc);
                 Console.WriteLine("xyz = " + xyz);
                 Console.ReadKey();
             }
       }
  }

 

Kết quả chạy của chương trình trên là:

Ta thấy 256 có mã nhị phân là 100000000 do kiểu byte có giới hạn chỉ đến 255 nên không thể chứa 256 được. Kiểu byte có kích thước là 1 bytetương đương với 8 bit, như vầy chương trình sẽ cắt mã nhị phân của 256 về còn8 bit từ trái sang. Ta được 00000000 (đủ 8 bit) tương đương với 0. Vậy biến xyz sẽ mang giá trị là 0.

Lưu ý: Ban đầu ta thấy biến abc = 256 nhưng khi ép kiểu thì giá trị của xyz = 0. Vậy nên, khi ép kiểu dữ liệu chúng ta phải thật sự cẩn thận nếu không sẽ làm ảnh hưởng đến kết quả của toàn bộ bài toán.

Ngoài ra chúng ta còn có một số phương thức chuyển đổi kiểu dữ liệu trong C# nằm trong lớp tiện ích Convert.

Các đặc điểm của các phương thức trong lớp Convert:

  • Nếu tham số truyền vào là null thì các phương thức sẽ trả về giá trị mặc định của kiểu dữ liệu.
  • Nếu tham số truyền vào sai định dạng hay vượt quá giới hạn thì chương trình sẽ báo lỗi.
  • Các tham số truyền vào các phương thức có thể là mọi kiểu dữ liệu cơ bản.

Bảng các phương thức chuyển đổi kiểu có sẵn trong C#:

Phương thức Miêu tả
ToBoolean Chuyển đổi một kiểu thành một giá trị Boolean nếu có thể
ToByte Chuyển đổi một kiểu thành một byte
ToChar Chuyển đổi một kiểu thành một Unicode Character, nếu có thể
ToDateTime Chuyển đổi một kiểu (integer hoặc string) thành các cấu trúc datetime
ToDecimal Chuyển đổi một kiểu số thực hoặc số nguyên thành kiểu thập phân
ToDouble Chuyển một kiểu thành kiểu double
ToInt16 Chuyển đổi một kiểu thành một 16-bit integer
ToInt32 Chuyển đổi một kiểu thành một 32-bit integer
ToInt64 Chuyển đổi một kiểu thành một 64-bit integer
ToSbyte Chuyển đổi một kiểu thành một kiểu signed byte
ToSingle Chuyển đổi một kiểu thành một số small floating point
ToSing Chuyển đổi một kiểu thành một String
ToType Chuyển đổi một kiểu thành một kiểu đã xác định
ToUInt16 Chuyển đổi một kiểu thành kiểu unsigned int
ToUInt32 Chuyển đổi một kiểu thành unsigned long
ToUInt64 Chuyển đổi một kiểu thành một unsigned big integer

3. Ví dụ

Một ví dụ nhỏ minh họa cho việc chuyển đổi bằng hai phương pháp ép kiểu nêu trên:

 

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace freetuts.net
{
    class freetuts
    {
        static void Main(string[] args)
        {
            int variable_1 = 16;
            double variable_2 = 211.98156;
         
            // IMPLICIT CASTING
            double result_1 = variable_1;
            Console.WriteLine("\ngia tri cua bien result_1 sau khi ep kieu = " + result_1);  // 16.0
         
            // EXPLICIT CASTING
            int result_2 = (int)variable_2;
            Console.WriteLine("\ngia tri cua bien result_2 sau khi ep kieu = " + result_2);  // 211
            
            Console.WriteLine("\n\n freetuts chuc ban hoc tot !!!");
            Console.ReadKey();
        }
    }
}

 

Biên dịch chương trình cho ta thấy kết quả:

Ta thấy giá trị của biến result_1 = variable_1 vì kích thước của kiểu giá trị float > int nên giá trị của nó sau khi ép kiểu không thay đổi. Ngược lại, ở biến result_2 < variable_2 bởi vì kiểu int là kiểu số nguyên nên nó không thể chứa kiểu double được, vì vậy nên phần thập phân phía sau sẽ được làm tròn.

Có một loại ép kiểu chúng ta thường xuyên dùng đó là ép từ kiểu string sang kiểu số. Vì những gì nhập từ bàn phím đều cho giá trị là chuỗi nên ta cần thực hiện phép chuyển đổi này trước khi sử dụng:

 

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace freetuts.net
{
    class freetuts
    {
        static void Main(string[] args)
        {
            int variable;
            Console.WriteLine("\nnhap vao mot so !");
            //variable = Console.ReadLine();// không thể gán được bởi vì variable là kiểu int
            variable = Convert.ToInt16(Console.ReadLine()); //thực hiện ép kiểu
            Console.WriteLine("\nso ban vua nhap: " + variable);
            Console.WriteLine("\n\n freetuts chuc ban hoc tot !!!");
            Console.ReadKey();
        }
    }
}

 

Biên dịch chương trình chúng ta sẽ nhận được kết quả:

3. Kết luận

Vậy là qua bài này mình và các bạn đã tìm hiểu thế nào là ép kiểu, tại sao phải ép kiểu và các loại ép kiểu. Cảm ơn các bạn đã theo dõi bài viết này.

Theo: freetuts.net

 

ĐĂNG KÝ THÀNH VIÊN

NẾU NỘI DUNG HỮU ÍCH HÃY XEM QUẢNG CÁO ĐỂ ỦNG HỘ

NẾU NỘI DUNG HỮU ÍCH HÃY XEM QUẢNG CÁO ĐỂ ỦNG HỘ

Được quan tâm nhiều nhất

  • Apple Watch Series 5 Teardown - Always on Display Explained

  • iPhone 11 Pro Max Teardown - Tiny Motherboard & BIG Battery!

  • Apple Watch Series 4 Teardown

  • Phim Ngắn Đột Kích - Phiên bản 10 năm trước

Bạn thấy bài viết này thế nào?
Thể hiện yêu thương tác giả ở đây nhé!

Thích bài viết

thích

Chia sẻ ngay!

phuongle

Thành viên từ: 10/12/2019

Điểm uy tín: 5,987

SMod: 1,289 hướng dẫn đã chia sẻ

Team

Lập Trình Thành viên của Lập Trình

1 Thành viên

1,289 bài viết

Thêm bình luận

Bình luận bằng tài khoản Facebook

After viewing your support content - Please click advertisement for Support & Donate us team! Đóng