Chuyển đổi kiểu dữ liệu (Type Casting)

Chuyển đổi kiểu dữ liệu là khi bạn muốn gán giá trị của một kiểu dữ liệu này sang kiểu dữ liệu khác

Difference Between Type Casting and Type Conversion - javatpoint

Trong C# có 2 cách chuyển đổi kiểu dữ liệu:

Implicit Casting (chuyển đổi ngầm định tự động)

Chuyển đổi kiểu dữ liệu range nhỏ hơn sang kiểu dữ liệu range lớn hơn.

char -> int -> long -> float -> double

int myInt = 9;

double myDouble = myInt;       // Automatic casting: int to double

 

Console.WriteLine(myInt);      // Outputs 9

Console.WriteLine(myDouble);   // Outputs 9

Explicit Casting (chuyển đổi tường minh bằng tay)

Chuyển đổi từ kiểu dữ liệu lớn hơn sang kiểu dữ liệu nhỏ hơn

double -> float -> long -> int -> char

int five = 5;

var doubleFive = (double)five;

 

char a = 'a';

var valueA = (int)a;

 

float myFloat = 4.56F;

decimal myMoney = (decimal)myFloat;

 

           

 

Khác nhau giữa casting, parsing và converting

Casting: là chuyển 1 giá trị từ kiểu này sang kiểu khác hoặc xuất ra lỗi

int five = 5;

var doubleFive = (double)five;

 

char a = 'a';

var valueA = (int)a;

 

float myFloat = 4.56F;

decimal myMoney = (decimal)myFloat;

Conversion: Là cố chuyển một kiểu đối tượng sang kiểu khác, ít lỗi hơn nhưng chậm hơn

int five = 5;

decimal decFive = Convert.ToDecimal(five);

 

decimal myMoney = 5.67M;

int intMoney = Convert.ToInt32(myMoney); //Value is now 6;

                                                     //the decimal value was rounded

Parsing: Là cố chuyển một chuỗi sang một kiểu nguyên thuỷ

string testString = "10.22.2000";

double decValue = double.Parse(testString); //Exception thrown here!

 

string intTest = "This is a test string";

int intValue = int.Parse(intTest); //Exception thrown here!

string value = "5.0";

decimal result;

 

bool isValid = decimal.TryParse(value, out result);

Khác nhau giữa Parse và Convert

string s1 = "1234";

string s2 = "1234.65";

string s3 = null;

string s4 = "123456789123456789123456789123456789123456789";

result = Int32.Parse(s1);    //1234

result = Int32.Parse(s2);    //FormatException

result = Int32.Parse(s3);    //ArgumentNullException

result = Int32.Parse(s4);    //OverflowException

result = Convert.ToInt32(s1);    // 1234

result = Convert.ToInt32(s2);    // FormatException

result = Convert.ToInt32(s3);    // 0

result = Convert.ToInt32(s4);    // OverflowException

TryParse()

Trong trường hợp chúng ta không biết liệu một string có thể chuyển sang kiểu nào đó hay không thì chúng ta có thể dùng TryParse()

string value = "5.0";

decimal result;

bool isValid = decimal.TryParse(value, out result);

Nếu giá trị biến isValid là true có nghĩa là chuỗi có thể chuyển thành công, còn ngược lại thì là fail. Từ khoá out chúng ta sẽ học trong phần sau.

Từ khoá mới

Từ khoá is: Sử dụng để kiểm tra nếu một giá trị cụ thể là một kiểu cụ thể

var myValue = 6.5M; //M literal means type will be decimal

if (myValue is decimal) { /*...*/ }

Từ khoá as: Sử dụng để chuyển một object từ một kiểu sang một kiểu khác

 Ví dụ 1:

string testString = "This is a test"; //string is a reference type

object objString = (object)testString; //Cast the string to an object

 

string test2 = objString as string; //Will convert to string successfully

Ví dụ 2:

public class ClassA { /*...*/ }

public class ClassB { /*...*/ }

 

var myClass = new ClassA();

var newClass = myClass as ClassB; //Exception thrown here!

Ví dụ 3:

public class ClassA { /*...*/ }

public class ClassB : ClassA { /*...*/ }

 

var myClass = new ClassB();

var convertedClass = myClass as ClassA;

Từ khoá typeof: Trả về kiểu của một đối tượng

var sentence = "This is a sentence.";

var type = sentence.GetType();

if (type == typeof(string)) { /*...*/ }

else if (type == typeof(int)) { /*...*/ }

Tổng kết

 


Tác giả: Bạch Ngọc Toàn

Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Lên trên