Để hiểu rõ hơn về Nullable trong C# là gì và các loại Nullable trong ngôn ngữ lập trình C#, hãy đọc tiếp bài viết này của Mytour.
Khám phá bản chất của Nullable trong C#.
1. Khái Niệm của Nullable trong C#.
2. Cách Khai Báo Nullable trong C#.
3. Sử Dụng Nullable trong C#.
4. Các Loại của Nullable trong C#.
4.1. Sự Khác Biệt Giữa Nullable và Kiểu Dữ Liệu Thường (General Data Type).
4.2. So Sánh Giữa Nullable và Các Giá Trị Không Phải Nullable.
4.3. Toán Tử Hợp Nhất Null trong C#.
4.4. Gán Giá Trị từ Biến Nullable cho Giá Trị Không Phải Nullable.
1. Khái Niệm của Nullable trong C#
Nullable là kiểu dữ liệu chứa dữ liệu được định nghĩa hoặc giá trị null. Lưu ý rằng loại dữ liệu của biến đã được chỉ định và có thể sử dụng.
Khái niệm của Nullable không tương thích với từ khóa 'var'.
2. Cách Khai Báo Nullable trong C#
Mọi loại dữ liệu (data type) đều có thể được khai báo là có thể null bằng việc sử dụng toán tử '?'.
Dưới đây là ví dụ về cú pháp khai báo Nullable:
int? i = null;
Được nhấn mạnh trước đó, 'var' không tương thích với Nullable.
Vì vậy, nếu chúng ta khai báo như sau:
var? i = null;, Compile Time sẽ báo lỗi.
3. Ứng Dụng của Nullable trong C#
Nullable được sử dụng khi chúng ta truyền tham số cho các đối tượng Stored Procedure hoặc Database. Khi một cột trong Table cho phép giá trị Null, chúng ta sử dụng Nullable trong trường hợp này.
Ví Dụ: Giả sử một Stored Procedure có tham số @A và @B, nó sẽ trả về giá trị của tham số @C.
Tham số này cũng có thể là Null. Do đó, chúng ta sử dụng biến Nullable để xử lý cả trường hợp giá trị là Null và giá trị được cho phép.
Chính xác, Nullable cho phép khai báo biến trong .NET và có thể sử dụng chúng trong quá trình xử lý Database.
4. Các Loại Nullable
4.1. Sự Khác Biệt Giữa Nullable và Kiểu Dữ Liệu Thường (General Data Type)
Nói một cách đơn giản, chúng ta không thể thực hiện các thao tác giữa kiểu dữ liệu Nullable và kiểu dữ liệu thường.
Ví Dụ:
Trong ví dụ này, x là kiểu nullable trong khi y không phải. Khi chương trình được thực thi, nó sẽ hiển thị thông báo lỗi sau đây:
Lỗi 1: Không thể chuyển đổi kiểu 'int?' sang 'int' một cách ngầm định. Có chuyển đổi tường minh tồn tại (bạn có thiếu việc ép kiểu?)
Để tránh lỗi trên, chúng ta cần khai báo tất cả các biến là kiểu Nullable như sau:
Chương trình sẽ hoạt động mà không có bất kỳ lỗi Compile Time hay lỗi Runtime nào xuất hiện.
4.2. So Sánh Giữa Nullable và Giá Trị Không Phải Nullable
Trong phần trước, Mytour đã đề cập đến lỗi khi thực thi Nullable với các giá trị không phải Nullable. Tuy nhiên, chúng ta cũng có thể so sánh giữa chúng.
Để hình dung dễ dàng hơn, mời bạn đọc tham khảo ví dụ dưới đây:
Trong ví dụ này, đoạn mã hoạt động tốt và giá trị được đánh giá là đúng.
Ngoài ra, đoạn mã cũng tương thích với toán tử '!='.
4.3. Toán Tử Hợp Nhất Null trong C#
Toán tử Null Coalescing trong C# được ký hiệu là '??'. Mời bạn tham khảo ví dụ sau để hiểu rõ hơn về toán tử này trong C#:
Trong câu lệnh: result = x ?? y;
Toán tử Null Coalescing gán giá trị của 'x' cho 'result', nếu 'x' là null, thì giá trị của 'y' sẽ được gán cho 'result'.
Nếu biến đầu tiên là null, giá trị sẽ được gán từ biến thứ hai. Trong ví dụ này, 'result' sẽ giữ giá trị Null.
Ghi chú: Biến 'result' cũng có thể là Null, nên nó phải được định nghĩa là Nullable.
4.4. Gán giá trị của biến Nullable cho giá trị không phải là Nullable
Gán trực tiếp giá trị của biến Nullable cho giá trị không phải là Nullable sẽ gây lỗi.
Hãy tham khảo ví dụ dưới đây:
Khi thực thi, đoạn mã sẽ trả về lỗi sau:
Error 1 Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)
Để khắc phục lỗi, chúng ta sẽ sử dụng toán tử Null Coalescing:
Bây giờ khi chạy chương trình, 'x' sẽ trả về giá trị 4. Để thay thế 0 trong câu lệnh int y = x ?? 0;, bạn có thể sử dụng số nguyên bất kỳ.
Mọi số nguyên bạn sử dụng sẽ là giá trị mặc định của 'y'.
Trong bài viết này, Mytour.vn giới thiệu về khái niệm Nullable trong C#. Bạn đọc có thể tham khảo thêm các bài viết khác trên Mytour để hiểu sâu hơn về vòng lặp (loop) trong C# cũng như tính đóng gói (encapsulation) trong C#.