Trong C# cung cấp cho chúng ta rất nhiều cách ép
kiểu nhưng ở đây tớ chỉ xin giới thiệu tới mọi người 4 cách:
1. Parse
Phương thức Parse là phương thức được sử dụng khá phổ biến
khi chúng ta muốn chuyển đổi một chuỗi sang một kiểu dữ liệu tương ứng.
Mỗi
kiểu dữ liệu cơ bản trong C# đều có phương thức Parse để chuyển đổi sang kiểu dữ
liệu đó. Một số ví dụ các câu lệnh minh họa cho việc chuyển đổi sử dụng phương
thức Parse
1 |
int a =
Int32.Parse( "123" );
|
2 |
float b =
Float.Parse( "20.7" );
|
3 |
bool c =
Boolean.Parse( "true" );
|
Nếu như chuỗi chúng ta truyền vào là rỗng, không đúng định dạng hoặc vượt quá
giá trị cho phép thì chúng ta sẽ nhận được các Exception tương ứng. Ví dụ:
1 |
int a =
Int32.Parse(“Hello”); |
2 |
byte b =
Byte.Parse(“10000000000”); |
3 |
bool c =
Boolean.Parse( null );
|
2. TryParse
Giống như Parse, TryParse cũng là phương thức được tích hợp
sẵn trong các lớp kiểu dữ liệu cơ bản của C#. Tuy nhiên, cú pháp của TryParse có
phần khác với Parse. Cụ thể, tham số thứ nhất của TryParse là chuỗi cần chuyển
đổi và tham số thứ hai là biến sẽ chứa giá trị đã được chuyển đổi, biến thứ hai
này phải được đánh dấu là out . Để hiểu hơn về out các bạn tra MSDN nhé.


Một số
ví dụ minh họa
2 |
Int32.TryParse(“123”, out a); |
3 |
Boolean.TryParse(“ false ”, out b); |
Điểm khác biệt thứ hai của TryParse so với Parse là phương thức TryParse
không ném ra các ngoại lệ như Parse mà sẽ trả về các giá trị true (chuyển đổi
thành công) hoặc false (chuyển đổi thất bại, biến mang giá trị mặc định).
2 |
Int32.TryParse( "hello" , out a); |
4 |
Boolean.TryParse( "" , out
b); |
Chú ý: Ngoài ra, phương thức TryParse sẽ thực thi nhanh hơn
phương thức Parse vì TryParse không ném ra ngoại lệ3. Convert Lớp Convert là một lớp
tiện ích trong C# cung cấp cho chúng ta rất nhiều phương thức tĩnh khác nhau để
chuyển đổi từ một kiểu dữ liệu này sang kiểu dữ liệu khác. Tham số mà các phương
thức trong Convert nhận không nhất thiết phải là chuỗi mà có thể ở nhiều kiểu dữ
liệu khác nhau (int, bool, double…). Ví dụ:
1 |
int a =
Convert.ToInt32( "123" );
|
2 |
bool b =
Convert.ToBoolean(13); |
Các phương thức trong lớp Convert sẽ trả về giá trị mặc định nếu như tham số
truyền vào là null. Còn trong các trường hợp sai định dạng hoặc vượt quá giới
hạn thì các phương thức đó sẽ ném ra các ngoại lệ tương tự như phương thức
Parse. Ví dụ:
1 |
bool a =
Convert.ToBoolean( "khoaimon" ); |
2 |
int b =
Convert.ToInt32( "123456787654" ); |
3 |
double d =
Convert.ToDouble( null );
|
4. Casting (Ép kiểu) Ép
kiểu là cách chúng ta có thể sử dụng khi muốn chuyển đổi giữa các kiểu dữ liệu
có tính chất tương tự nhau (thường là số). Ví dụ :
Ngoài ra, đối với các giá trị được lưu trong kiểu tổng quát Object (bằng cách
boxing) thì chúng ta có thể ép kiểu đưa về kiểu dữ liệu ban đầu (Tìm hiểu về
Boxing và Unboxing)
Ép kiểu chỉ được sử dụng khi chúng ta biết rõ rằng đối tượng đó chứa kiểu dữ
liệu tương ứng với kiểu mà ta cần chuyển tới. Ví dụ như các trường hợp sau sẽ là
các lỗi cú pháp trong lập trình:
Chú ý: Việc sử dụng cách nào là do tùy
chương trình và còn phụ thuộc vào sự quan hệ giữa các kiểu dữ liệu vì thế các
bạn nên chú ý nhé.
Lần trước có một mem hỏi tớ về toán tử "as". Và tiện
đây tớ xin chia sẻ thêm. Ngoài việc sử dụng casting thuần túy, chúng ta có thể
sử dụng toán tử “as”.
Nhược điểm của việc sử dụng casting thuần túy là nếu
việc casting thất bại thì chúng ta sẽ nhận được một exception cho việc thất bại
đó. Tuy nhiên, nếu sử dụng toán tử “as”, nếu việc casting không thành công thì
chúng ta sẽ nhận về một giá trị null thay vì là một exception.
vd:
1 |
var myObject = existingObject as MyObject; |
Giả định rằng nếu việc chuyển đổi trên sẽ thất bại thì myObject lúc này sẽ
mang giá trị null.
theo codeaz.com
Không có nhận xét nào:
Đăng nhận xét