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
int a = Int32.Parse("123"); //a sẽ mang giá trị 123
float b = Float.Parse("20.7"); //b sẽ mang giá trị 20.7
bool c = Boolean.Parse("true"); //c sẽ mang giá trị 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ụ:
int a = Int32.Parse(“Hello”); //sai định dạng, FormatException
byte b = Byte.Parse(“10000000000”); //quá giới hạn, OverflowException
bool c = Boolean.Parse(null); //tham số là null, ArgumentNullException
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
int a;
Int32.TryParse(“123”, out a); //a sẽ mang giá trị 123 bool b;
Boolean.TryParse(“false”, out b); //b sẽ mang giá trị false
Đ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).
int a;
Int32.TryParse("hello", out a); //trả về giá trị false, a mang giá trị 0
bool b;
Boolean.TryParse("", out b); //trả về giá trị false, b mang giá trị False
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ụ:
int a = Convert.ToInt32("123"); //chuyển chuỗi 123 sang số nguyên
bool b = Convert.ToBoolean(13); //chuyển số 13 sang kiểu bool
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ụ:
bool a = Convert.ToBoolean("khoaimon"); //FormatException
int b = Convert.ToInt32("123456787654"); //OverflowException
double d = Convert.ToDouble(null); //trả về giá trị mặc định
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ụ :
int a = 100;
float b = a; //chuyển đổi ngầm định, b = 100
int c = (int)b; //chuyển đổi rõ ràng, c = 100
int a = 100;
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)
object b = a; //boxing, b là kiểu tham chiếu chứa giá trị 100
int c = (int)b; //unboxing, c mang giá trị 100
É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:
string a = "1234";
int b = (int)a; //lỗi, không thể ép kiểu chuỗi sang kiểu số
bool c = true;
double d = (double)c; //lỗi, không thể ép kiểu bool sang kiểu double
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:
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.
Thứ Ba, 11 tháng 10, 2011
Đăng ký:
Đăng Nhận xét (Atom)
Bài đăng phổ biến
-
Công cụ Đăng Ký Bản Quyền Sử Dụng Kế Toán Smart Pro ( 2.0 - 2.5 - 3.0) Video Hướng Dẫn Đăng Ký Bản Quyền Kế Toán Smart Pro (2.0 - 2.5 - 3.0)...
-
HTsoft POS .NET là phần mềm quản lý Kho-Bán hàng và Chăm sóc khách hàng chuyên nghiệp, áp dụng tốt cho nhiều lĩnh vực kinh doanh khác nhau ...
-
* lưu ý: tính năng này yêu cầu bạn phải có kết nối Internet khi sử dụng phần mềm. Bạn vui lòng thực hiện các bước sau để đăng ký dùng miễn p...
-
Clover 3.0.386 - Tạo Tabs File Explorer cho Windows 8.1 http://www.softpedia.com/progDownload/Clover-EJIE-Download-220301.html
-
Đề bài: nhập 2 số nguyên dương a,b. Tính ước số chung lớn nhất và bội chung nhỏ nhất của a,b. Bài giải: Cách 1: #include <stdio.h> int...
-
Phần mềm quản lý bán hàng TTV Sales là giải pháp giúp các doanh nghiệp quản lý các chuỗi cửa hàng, sản phẩm, nhân viên một cách có hệ thống ...
-
Đề bài: Trong kỳ thi tuyển, mỗi thí sinh sẽ trúng tuyển nếu điểm tổng kết của thí sinh đó lớn hơn hoặc bằng điểm chuẩn và không có môn nào đ...
-
Đề bài: nhập vào tử số, mẫu số (khác 0) của một phân số. Hãy rút gọn phân số này. Chú ý chọn dạng xuất thích hợp trong trường hợp mẫu số bằn...
-
Bổ sung vào các chức năng đã có ở hai phiên bản trước, phần mềm Quản lý gia phả phiên bản Advanced được nâng cấp thêm các tính năng nổi trội...
-
Có thể xài được nhưng cũng có thể không xài được nếu như chủ nhân đã đổi pass. Acc: hoanglinh1714 Pass: A01656101024LINH Acc: hieukenpt19999...
0 nhận xét:
Đăng nhận xét