Nullable trong C# là gì?

Để tìm hiểu về Nullable trong C# là gì? Các loại Nullable trong C#, bạn đọc cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn.

Nullable trong C# là gì?
 

Mục Lục bài viết:
1. Nullable trong C# là gì?.
2. Khai báo Nullable trong C#.
3. Sử dụng Nullable trong C#.
4. Các loại Nullable trong C#.
    4.1. Nullable không tương thích với kiểu dữ liệu thường(General Data Type).

    4.2. So sánh Nullable với các giá trị không phải Nullable.
    4.3. Toán tử Null Coalescing trong C#.
    4.4. Gán giá trị biến Nullable cho giá trị không phải Nullable.

1. Nullable trong C# là gì?

Nullable là loại dữ liệu chứa dữ liệu được định nghĩa hoặc giá trị null. Lưu ý ở đây loại dữ liệu biến đã được chỉ định và có thể sử dụng.
Khái niệm nullable không tương thích với "var".

2. Khai báo Nullable trong C#

Bất kỳ kiểu dữ liệu nào (data type) đều có thể được khai báo là nullable bằng cách sử dụng toán tử "?".

Dưới đây là ví dụ về cú pháp khai báo Nullable:
int? i = null;
Như Taimienphi.vn đã đề cập ở trên, "var" không tương thích với Nullable.
Vì vậy Compile Time sẽ trả về thông báo lỗi nếu chúng ta khai báo như dưới đây:
var? i = null;

3. Sử dụng Nullable trong C#

Nullable được sử dụng khi chúng ta truyền tham số bất kỳ cho các đối tượng Stored Procedure hoặc Database. Nếu một cột trong Table cho phép giá trị Null, thì trong trường hợp này chúng ta sử dụng Nullable.

Ví dụ: Giả sử như Stored Procedure chấp nhận 2 tham số @A và @B, nó sẽ trả về tham số @C.

Tham số đầu ra này cũng có thể là Null. Vì vậy trong trường hợp này chúng ta sử dụng biến Nullable để lấy Null cũng như các giá trị được cho phép.

Về cơ bản, Nullable cho phép chúng ta khai báo các biến trong .net, có thể được sử dụng trong quá trình xử lý Database.

4. Các loại Nullable

4.1. Nullable không tương thích với kiểu dữ liệu thường(General Data Type)

Tức là chúng ta không thể thực thi hoạt động giữa Nullable và kiểu dữ liệu thường không phải là Nullable.

Ví dụ:

Trong ví dụ trên, x là nullable và y không phải là nullable. Vì vậy khi chương trình được thực thi, sẽ trả về thông báo lỗi như dưới đây:

Error 1 Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)

Để tránh lỗi trên, chúng ta phải khai báo tất cả các biến là Nullable như dưới đây:

Chương trình sẽ hoạt động mà không có bất kỳ lỗi Compile Time và lỗi Runtime nào xảy ra.

4.2. So sánh Nullable với các giá trị không phải Nullable

Trong phần trên Taimienphi.vn đã đề cập lỗi sẽ xảy ra nếu thực thi Nullable với các giá trị không phải Nullable, tuy nhiên chúng ta có thể so sánh giữa các giá trị này với nhau.
Để dễ hình dung hơn, bạn đọc cùng tham khảo tiếp ví dụ dưới đây:

Trong ví dụ trên, các đoạn mã đều hoạt động tốt và các giá trị được đánh giá là đúng.
Ngoài ra đoạn mã trên cũng hoạt động tốt với toán tử "!=".

4.3. Toán tử Null Coalescing trong C#

Toán tử Null Coalescing trong C# được ký hiệu là "??". Cùng tham khảo tiếp ví dụ dưới đây để hiểu rõ hơn về toán tử Null Coalescing trong C#:

Trong lệnh: result = x ?? y;

Toán tử Null Coalescing được gán cho giá trị của "x" cho "result", nếu "x" là null thì nó sẽ gán giá trị của "y" cho "result".

Vì vậy nếu biến đầu tiên là null thì giá trị đó sẽ được gán, nếu không giá trị của biến thứ 2 sẽ được gán. Trong ví dụ trên, "result" sẽ giữ Null.

Lưu ý: Biến "result" cũng có thể có Null, vì vậy nó biến này phải được định nghĩa là Nullable.

4.4. Gán giá trị biến Nullable cho giá trị không phải Nullable

Gán trực tiếp giá trị biến Nullable cho giá trị không phải Nullable sẽ xảy ra lỗi.
Cùng tham khảo ví dụ bên dưới đây:

Khi được thực thi, đoạn mã trên sẽ trả về lỗi dưới đây:
Error 1 Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)
Để khắc phục lỗi trên, chúng ta sẽ sử dụng toán tử Null Coalescing:

Bây giờ khi chạy chương trình trên, ý sẽ trả về giá trị của x là 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ỳ.

Bất cứ số nguyên nào mà bạn sử dụng sẽ là giá trị mặc định của "y".

Bài viết trên đây Taimienphi. vn vừa giới thiệu cho bạn về Nullable trong C# là gì? Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết khác đã có trên Taimienphi.vn để tìm hiểu rõ hơn về vòng lặp (loop) trong C# cũng như tính đóng gói (encapsulation) trong C# nhé.

Trong bài học C# trước Taimienphi.vn đã giới thiệu cho bạn về toán tử và câu lệnh điều kiện trong C#. Bài viết dưới đây Taimienphi.vn sẽ giới thiệu tiếp cho bạn về Nullable trong C# là gì?
Tìm hiểu về Học C#
Vòng lặp (loop) trong C#
Bloodshed Dev C++ - Hướng dẫn thực thi, biên dịch
Comment trong C++
Enum trong C# là gì? Cú pháp và cách khởi tạo
Con trỏ (pointer) trong C

ĐỌC NHIỀU