Vb mạng phân tích cú pháp html

Chuyển đổi kiểu dữ liệu hay còn gọi là ép kiểu(casting) là biến đổi dữ liệu thuộc kiểu dữ liệu này thành kiểu dữ liệu khác

Tại sao cần phải chuyển đổi kiểu dữ liệu ?

  • Để chuyển dữ liệu sang một kiểu dữ liệu mong muốn phục vụ cho một hoặc nhiều xử lý nhất định
  • Để chuyển dữ liệu về định dạng mong muốn (ví dụ như muốn chuyển định dạng của một chuỗi tháng Việt Nam(17/07/2017) thành định dạng theo kiểu Nhật Bản(2017/07/17))

Trong C# có nhiều kiểu chuyển đổi kiểu dữ liệu ?

Có 4 cách để chuyển đổi

  1. Switching type of default (Ngầm định)
  2. Chuyển đổi kiểu tường minh (Explicit)
  3. Sử dụng phương thức, lớp hỗ trợ sẵn có
    • Dùng phương thức Parse(), TryParse()
    • Dùng lớp hỗ trợ sẵn có Chuyển đổi
  4. Do set up the character character format to convert

Nội dung chi tiết

1. Switching type of default (Ngầm định)

1. Chuyển đổi kiểu trụ định (Ngầm định)

– Việc chuyển đổi này được thực hiện bởi C# theo một phương thức an toàn kiểu (type-safe), không cần thiết lập trình viên can thiệp

– Có thể thực hiện được khi muốn chuyển đổi kiểu dữ liệu

  • Có miền giá trị nhỏ sang loại dữ liệu có miền giá trị lớn hơn (xác định miền giá trị của một loại dữ liệu cụ thể, xem bài Kiểu dữ liệu)
  • Từ lớp dẫn xuất(lớp con) thành lớp cơ sở(lớp cha) (Khái niệm lớp dẫn xuất, lớp cơ sở được trình bày trong bài Tính kế thừa)

// 1. Ép kiểu từ kiểu có miền giá trị nhỏ qua kiểu có miền giá trị lớn
byte b = 7;
int i = b;          /* Kiểu int có miền giá trị lớn hơn kiểu byte       */

float flt = 13.3f;
double dbl = flt;   /* Kiểu double có miền giá trị lớn hơn kiểu float   */

// 2. Ép kiểu từ lớp dẫn xuất(string) qua lớp cơ sở(object)
string s = "Hello World";
object o = s;

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

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

– Việc chuyển đổi này được thực hiện một cách rõ ràng bởi lập trình viên bằng cách sử dụng một phép tính toán ép kiểu là 2 dấu đóng mở chiết vòng () bao ngoài kiểu dữ liệu muốn bỏ

– Một số đặc điểm của chuyển đổi kiểu tường minh

  • Hỗ trợ trong công việc đấm bốc và mở hộp đối tượng. (Xem bài Kiểu dữ liệu)
  • Chỉ khi chúng ta biết rõ các biến thuộc kiểu dữ liệu nào mới thực hiện chuyển đổi. If could not error when running program
  • Thường được sử dụng để chuyển đổi giữa các kiểu dữ liệu có tính chất tương tự nhau(Thường được sử dụng với số). Đối với trường hợp là số thì
    • Chúng ta có thực hiện ép kiểu dữ liệu lớn hơn về kiểu dữ liệu nhỏ hơn mà không báo lỗi
    • Nếu dữ liệu cần ép kiểu quá miền giá trị của kiểu dữ liệu muốn ép kiểu về thì chương trình sẽ tự động cắt bit(từ trái qua) để phù hợp với khả năng chứa kiểu dữ liệu đó. Vì vậy mà cũng có trường hợp làm thay đổi giá trị của biến kiểu ban đầu sau khi ép kiểu

// Trường hợp giá trị sau khi cast bị thay đổi do Kiểu cần ép vượt quá miền giá trị của kiểu dữ liệu muốn ép
int num1 = 300;
byte b = (byte)num1;
/* Vì kiểu byte có giới hạn đến giá trị 255, nên không thể chứa số 300 được.
 * Kiểu byte có kích thước là 1 byte tương đương 8 bits. Do đó chương trình sẽ cắt mã nhị phân tính từ trái qua của số 300 về còn 8 bits.
 * Mã nhị phân của số 300 là 100101100 cắt từ trái qua 1 bit ta được 00101100 (đủ 8 bit) tương đương với số 44.
 * Nên cuối cùng biến b sẽ có giá trị là 44.
 * http://www.binaryhexconverter.com/binary-to-decimal-converter
 */

Console.WriteLine("num1 = " + num1);    // 300
Console.WriteLine("b = " + b);          // 44

double dbl = 29.89;
int num2 = (int)dbl;

Console.WriteLine("dbl  = " + dbl);     // 29.89
Console.WriteLine("num2 = " + num2);    // 29

// Ép kiểu từ lớp cơ sở(object) qua lớp dẫn xuất(string)
string str1 = "Hello World";
object obj = str1;
string str2 = (string)obj;

Console.WriteLine("str2 = " + str2);    // Hello World

3. Sử dụng phương thức, lớp hỗ trợ sẵn có

3. Sử dụng phương thức, lớp hỗ trợ sẵn có

#1. Sử dụng phương thức 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 một chuỗi sang một kiểu dữ liệu tương ứng.
Bố trí các 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 đó. Chúng ta có Boolean. Sử dụng phân tích cú pháp để chuyển về kiểu Boolean, Int32. Sử dụng Parse để chuyển về kiểu Int32, Double. Sử dụng phân tích cú pháp để chuyển chuỗi về kiểu Double,…

– Cách sử dụng

string stringValue = "123";
int a = int.Parse( stringValue );   // a sẽ mang giá trị 123

float b = float.Parse( "20.7" );    // b sẽ mang giá trị 20.7
bool c = bool.Parse( "true" );      // c sẽ mang giá trị True

– Nếu như chuỗi chúng ta truyền vào bị rỗng, sai đị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

int a = Int32.Parse( "Hello" );   // Sai định dạng, bị lỗi: FormatException 

byte b = Byte.Parse( "256" );     // Vượt quá giới hạn miền giá trị, bị lỗi: OverflowException 

bool c = Boolean.Parse( null );   // Tham số là null, bị lỗi: ArgumentNullException

#2. Sử dụng phương thức 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

  • Tham số thứ nhất của TryPude là chuỗi/giá trị cần chuyển đổi
  • Tham số thứ hai là biến sẽ chứa giá trị sau khi được chuyển đổi đi kèm với từ khóa, để thông báo rằng biến thứ hai sẽ truyền theo kiểu tham chiếu (Xem bài Cách truyền tham trị, tham chiếu trong C#)

– Cách sử dụng

// Bước 1: Khai báo biến sẽ nhận kết quả sau khi chuyển đổi
int a;
// Bước 2: Sử dụng phương thức TryParse để chuyển đổi
int.TryParse("123", out a);            /* Hoặc: Int32.TryParse("123", out a);     */
Console.WriteLine("a = {0}", a);       /* Ouput: a = 123                           */

bool b;
bool.TryParse("true", out b);          /* Hoặc: Boolean.TryParse("true", out b);  */
Console.WriteLine("b = {0}", b);       /* Ouput: b = True                          */

// Chuyển đổi kiểu DateTime
DateTime result = DateTime.Now;

string day1 = "2017年06月17日";
string day2 = "2017/06/17";

DateTime.TryParse(day1, out result);
Console.WriteLine(result);             /* Output: 2017/06/17 0:00:00              */

DateTime.TryParse(day2, out result);
Console.WriteLine(result);             /* Output: 2017/06/17 0:00:00              */

– Điểm khác biệt thứ hai của TryParse so với Parse là phương thức TryParse khi chuyển đổi kiểu bị lỗi sẽ không ném ra các ngoại lệ như Parse mà sẽ trả về giá trị mặc định của kiểu dữ liệu chuyển đổi (int trả về 0,

double a;
double.TryParse("Hello", out a);
Console.WriteLine("a = {0}", a);	   /* Ouput: a = 0     */
									   
bool b;								   
Boolean.TryParse("Welcome", out b);	   
Console.WriteLine("b = {0}", b);	   /* Ouput: a = False */

– Như vậy có thể thấy rằng sử dụng phương thức TryParse sẽ an toàn hơn phương thức Parse trong trường hợp không biết chắc chắn về giá trị muốn chuyển đổi

#3. Sử dụng các lớp hỗ trợ có sẵn Chuyển đổi

– 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 từ một kiểu dữ liệu này sang kiểu dữ liệu khác

– Một số phương thức chuyển đổi kiểu hoặc sử dụng của lớp Chuyển đổi

Ý nghĩa của phương thứcToInt32Chuyển đổi một kiểu thành kiểu intToDoubleChuyển đổi một kiểu thành kiểu doubleToByteChuyển đổi một kiểu thành một byte (nếu có thể)ToDateTimeChuyển đổi một kiểu cấu trúc date-timeToBooleanChuyển đổi kiểu thành một bool (true, false) nếu

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

  • Tham số truyền vào của các phương thức 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…)
  • Tham số truyền vào 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 ngoại lệ tương ứng
  • 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

– Cách sử dụng

int a = Convert.ToInt32( "123" );
Console.WriteLine(a);               // a = 123

double b = Convert.ToInt32( 789 );
Console.WriteLine(b);               // b = 789

bool c = Convert.ToBoolean( 123 );
Console.WriteLine(c);               // c = True

bool d = Convert.ToBoolean(null);   // Tham số truyền vào là null -> sẽ output giá trị mặc định của kiểu dữ liệu
Console.WriteLine(d);               // d = False

4. Do set up the character character format to convert

4. Thiết lập trình tự định nghĩa cách chuyển đổi thành viên

– Khi chúng ta tạo ra một kiểu dữ liệu mới, tùy theo nhu cầu sử dụng mà chúng ta không cần hoặc sẽ định nghĩa cách chuyển đổi kiểu dữ liệu mới sang 1 trong các kiểu cơ bản và ngược lại

– Việc thực hiện sẽ được trình bày chi tiết trong bài Cách chuyển đổi qua lại giữa định nghĩa kiểu dữ liệu và kiểu chuỗi trong C#

Tổng hợp một số cách chuyển đổi kiểu int sang kiểu chuỗi

int i = 99;

string s1 = i.ToString();
string s2 = Convert.ToString(i);
string s3 = string.Format("{0}", i);
string s4 = $"{i}";
string s5 = "" + i;
string s6 = string.Empty + i;
string s7 = new StringBuilder().Append(i).ToString();

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ý