Parse, TryParse, Convert Và Casting (Ép Kiểu) - ChienTX
Có thể bạn quan tâm
- Tôi là ai?
- Tủ sách
Có nhiều cách để có thể chuyển đổi dữ liệu trong C# như sử dụng các phương thức Parse, TryParse, sử dụng lớp Convert hay là đôi khi còn có thể ép kiểu (Casting) từ kiểu dữ liệu này sang kiểu dữ liệu khác. Chúng ta sẽ lần lượt tìm hiểu các cách này cũng như sự khác biệt giữa chúng
- 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 đó. Ta có Boolean.Parse dùng để chuyển về kiểu Boolean, Int32.Parse dùng để chuyển về kiểu Int 32, Double.Parse dùng để chuyển chuỗi về kiểu Double .v.v… 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
- 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 (để cho biến là chúng ta sẽ truyền tham chiếu, bạn có thể xem thêm tại đây về out: http://msdn.microsoft.com/en-us/library/t3c3bfhx%28VS.80%29.aspx
Một số ví dụ minh họa sử dụng TryParse để chuyển đổi kiểu
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
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ệ - 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(27); //chuyển số 27 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("hello"); //FormatException int b = Convert.ToInt32("123456787654"); //OverflowException double d = Convert.ToDouble(null); //trả về giá trị mặc định - 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
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: http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx). Ví dụ:int a = 100; 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
Kết luận: C# cung cấp nhiều giải pháp để chúng ta có thể chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác. Việc sử dụng phương pháp nào là tùy vào đặc điểm của chương trình cũng như thói quen của người sử dụng. Nếu như biết cách sử dụng linh hoạt giữa các phương pháp thì chúng ta có thể viết được một chương trình dễ đọc, dễ hiểu và dễ quản lý.
Chia sẻ:
- Tweet
- Thẻ .NET, C#, Conversion
Bởi xuanchien
Tran Xuan Chien.
Japan Advanced Institute of Science and Technology - Japan.
Senior Developer - NUS Technology.
View Archive Giải thuật Huffman + Chương trình Test Property trong C#15 replies on “Parse, TryParse, Convert và Casting (Ép kiểu)”
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. Ví dụ: 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.
cho mình hỏi
do mình mới học nên không biết mìng co chuổi string str = “0001”; làm sao bây giờ mình ép kiểu này lại số nguyên mà không bị mất số 0 ở đầu
Nếu đã là số thì việc có các số 0 ở đầu là vô nghĩa. Bởi vì bạn sẽ dùng số đó để cộng, trừ, nhân, chia… thì tại sao cần phải có các số 0 ở đầu? Bạn có thể nêu rõ mục đích không?
Hỏi câu ngớ ngẩn. Số nguyên làm đéo gì có số 0 ở đầu
@Lãng tử bụi đời: Con ak, người ta không biết nên mới hỏi, con ko trả lời kệ m con sao lại nói người ta như thế về nhà con cm vs bố
cho mình hỏi thế convert với kiểu int[,] 2 chiều làm sao???
“cho mình hỏi thế convert với kiểu int[,] 2 chiều làm sao???” Kiểu int[,] như bạn nói không phải là một biến kiểu int, mà là một mảng 2 chiều ( ma trận ) kiểu int ,chứa nhiều biến kiểu int chúng ta chỉ có thể convert, pase… kiểu dữ liệu của một biến,
Reblogged this on Sống là cho, đâu chỉ nhận riêng mình.
Anh ơi, cho em hỏi ạ. Em có trường IDtin mang dữ liệu là int thì em viết thế này để lấy mã Tin ạ private int NewID = 0; protected void Page_Load(object sender, EventArgs e) { try { string id = Request.QueryString.Get(“IDTin”); txtMaTin.Text = id; NewID = Convert.ToInt32(id); if (!Page.IsPostBack) { LoadDuLieu(); } } catch { } }
Bây giờ nếu trường IDTin mang kdl là nvarchar thì em nên viết thế nào để lấy mã Tin ạ? ANh giúp em với ạ
@Hoa Đỗ Quyên: Chỉ cần: string id = Request.QueryString.Get(“IDTin”);
[…] Tham khảo […]
Mình đang mày mò làm giao tiếp C# với thiết bị. Thiết bị nhận giá trị bool là 0 và 1, nhưng c# lại gán bool là true và false, nên khi mình ghi biến N (kiểu bool) vào thiết bị thì nó ko hiểu, mình phải dùng biến M(kiểu int) để xác định giá trị N = true -> M = 1, N=flase -> M=0. Bạn có cách nào giúp mình giải quyết bài toán này gọn hơn không? thanks!
Trong trường hợp này bạn chỉ cần dùng Convert.ToInt32 là được.
Convert.ToInt32(N)
Regards,
Tran Xuan Chien School of Information Science Japan Advanced Institute of Science and Technology (JAIST)
>
private void textBox1_TextChanged(object sender, EventArgs e) { if (serialPort1.IsOpen) { textBox1.Text = serialPort1.ReadExisting(); Int16 number = Convert.ToInt16(textBox1.Text);
}
}
[…] Read More […]
Bình luận về bài viết này Hủy trả lời
RSS Links
- RSS - Bài viết
Bài viết mới nhất
- Vô thường và Biệt ly
- 10 năm, những gì đã thay đổi?
- Thầy Bảo
- Tổng kết 2017 – Dự định 2018
- Trận đấu lịch sử – U23 Vietnam
Các bài viết bổi bật
- Biên dịch mã nguồn C# từ Command Line
- Sử dụng GridView trong ASP.NET
Chuyên mục
- ASP.NET (5)
- C# (15)
- Comedy (3)
- Computer and Internet (4)
- Daily Life (27)
- ImagineCup (1)
- Japan (11)
- Learning (12)
- nlp (5)
- Programming (26)
- Puzzles (2)
- Ruby on Rails (3)
- Travel (2)
- Uncategorized (3)
- Visual Studio (1)
- Web (2)
- WPF (1)
- XML (2)
Tags
.NET ADO.NET ai Algorithm ASP.NET Binding C# cancan Comedy Command Line computer science Console const Conversion Crop CSS CTS Data devise Diectory Error File Garbage Collector gem GLUT Grid GridView Huffman ImagineCup IO Japan jQuery korea Learning life LINQ Menu nlp nltk omniauth OOP OpenGL OS Password Paypal Pointer politics Programming Property Puzzle rails readonly research Ruby Ruby on Rails RVM Stripe Tips Travelling Ubuntu Virus Visual Studio Web Web Forms WebRequest WebResponse Web Scraping Windows WPF XMLKết nối
Nhập địa chỉ email để đăng ký với blog này và nhận thông báo qua email khi có bài viết mới
Địa chỉ email:
Đăng ký
Tham gia cùng 136 người đăng ký khácThống kê Blog
- 619 674 lượt xem
- Bình luận
- Đăng lại
- Theo dõi Đã theo dõi
-
ChienTX Đã có 136 người theo dõi Theo dõi ngay - Đã có tài khoản WordPress.com? Đăng nhập.
-
-
-
ChienTX - Theo dõi Đã theo dõi
- Đăng ký
- Đăng nhập
- URL rút gọn
- Báo cáo nội dung
- Xem toàn bộ bài viết
- Quản lý theo dõi
- Ẩn menu
-
Từ khóa » ép Kiểu Bool Trong C#
-
Ép Kiểu Trong C# | How Kteam
-
Ép Kiểu Trong C# - Học Lập Trình C# Online - VietTuts
-
Các Cách Chuyển đổi Kiểu Dữ Liệu Trong C# - Minh Hoàng Blog
-
Parse Là Gì - ép Kiểu Trong C# - Thienmaonline
-
Chuyển đổi Kiểu Dữ Liệu Trong C# - Quản Trị Máy Tính
-
Parse Là Gì - Ép Kiểu Trong C# - HappyMobile.Vn
-
Cách Chuyển đổi Kiểu Dữ Liệu Trong C# - MegaCode
-
Bài 2: Lập Trình C# Căn Bản – Phần 1 – Tin Công Nghệ Và Bài Học Lập ...
-
Chuyển đổi Các Kiểu Dữ Liệu Trong C# - Express Magazine
-
Parse Là Gì - ép Kiểu Trong C# - Có Nghĩa Là Gì, Ý Nghĩa La Gi 2021
-
Chuyển đổi Kiểu Dữ Liệu Trong C# | Comdy
-
Kiểu Bool, Boolean Trong Lập Trình C/C++ (Code Ví Dụ) - CodeCute
-
Cách ép Kiểu(convert) Dữ Liệu Trong C# - Jundat95
-
2.0 Boolean - Khóa Học C++