Parse, TryParse, Convert và Casting (Ép kiểu)

Parse, TryParse, Convert và Casting (Ép kiểu)

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

  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 đó. 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
  2. TryParseGiố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: https://expressmagazine.net

    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ệ
  3. ConvertLớ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
  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
    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: https://expressmagazine.net). 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ý.

 Nguồn chienuit.wordpress.com

Tags: 
Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Binh Tran Thanh

Drupal Consultant

Started my career as a drupal8 developer in EM Solutions . I love learning Web technologies like HTML, CSS, PHP, Jquery Ajax and Drupal backend . Currently working as a drupal backend developer.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Samsung tung thêm chiêu quảng cáo độc chế giễu Apple

Samsung tung thêm chiêu quảng cáo độc chế giễu Apple

Để thu hút người dùng Úc đến với sản phẩm máy tính bảng của mình, trong một trang quảng cáo mới đây, Samsung tự hào đã giật tít tiêu đề "the tablet Apple tried to stop"

Phần 2 - Custom Image Search with Solr, Filefield Sources và Ctools

Phần 2 - Custom Image Search with Solr, Filefield Sources và Ctools

Drupal using Apache Solr, Filefield Sources, and Ctools. So far, we have created our custom FileField Source 

10 suy nghĩ cần thiết cho Drupal site

10 suy nghĩ cần thiết cho Drupal site

This article comes as a continuation to the previous one in which I exemplified 5 things you should not do on or with your Drupal site. Today, however, I'll double up, take a more positive approach and go with 10 things you definitely should be doing. So let's begin.

Công ty diệt chuột T&C

 

Diet con trung