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
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.