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
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.
Bài viết liên quan
Sử dụng kiểu tập hợp (Enum)
Enum (viết tắt của Enumeration) trong C# là một kiểu dữ liệu đặc biệt cho phép bạn định nghĩa một tập hợp các hằng số có tên
Đọc thêmTính đóng gói (Encapsulation) và best practices trong OOP
(Tính đóng gói) là một trong những nguyên tắc cơ bản của lập trình hướng đối tượng (OOP).
Đọc thêmTính trừu tượng - Abstract classes and interfaces
Tính trừu tượng (Abstraction) trong OOP là kỹ thuật ẩn đi các chi tiết triển khai và chỉ hiển thị cho người dùng những chức năng cần thiết.
Đọc thêmTính chất kế thừa (Inheritance) và đa hình (polymorphism)
Kế thừa là cơ chế cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác.
Đọc thêmCách debug ứng dụng C#
Hướng dẫn cách debug chương trình C# trong Visual Studio và Visual Studio Code
Đọc thêmTìm hiểu về các loại Collection trong C#
Trong C#, collections là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các nhóm đối tượng. C# cung cấp nhiều loại collections khác nhau để phù hợp với các yêu cầu cụ thể của lập trình viên
Đọc thêmTổng quan về Generic và Non-Generic Collection
Hiểu khái niệm Generic và Non-Generic Collection và phân biệt giữa Generic Collection và Non-Generic Collection.
Đọc thêmSử dụng mảng (Arrays)
Mảng trong C# là một cấu trúc dữ liệu lưu trữ một dãy các phần tử có bộ nhớ nằm liên tiếp nhau và có kích thước cố đinh.
Đọc thêmLập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programing) hay còn gọi là OOP. Là một kỹ thuật lập trình cho phép các lập trình viên có thể ánh xạ các thực thể bên ngoài đời thực và trừu tượng hoá thành các class và object trong mã nguồn.
Đọc thêmVòng lặp (loop)
Trong thực tế khi bạn cần thực thi một khối lệnh nhiều lần. Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một khối lệnh nhiều lần.
Đọc thêm