TOC

This article is currently in the process of being translated into Vietnamese (~87% done).

Data types:

Nullable types

NULL có nghĩa là không có gì - một biến không chứa giá trị. Ở điểm này, bạn có thể làm việc với biến không được khởi tạo - nếu vậy, bạn cũng biết rằng bạn luôn phải đảm bảo một biến có giá trị trước khi bạn cố gắng truy cập vào giá trị. Nếu không, bạn có thể sẽ có ngoại lệ NullReferenceException.

NULL đặc biệt liên quan khi làm việc với đối tượng và chuỗi. Hay nois cách khác, khi làm việc với số, ví dụ số nguyên, bạn sẽ thấy nó luôn có giá trị (mặc định). Với một số nguyên, giá trị mặc định là 0, không được lẫn với NULL - chúng không giống nhau, kể cả khi một vài ngôn ngữ coi chúng như một. 0 là một số - NULL là không có gì.

Vì vậy nếu bạn muốn có một số lưu giá trị NULL, bạn có thể tắc vì bạn không thể gán giá trị null cho biến số nguyên. Tất nhiên nếu số nguyên đó được định nghĩa null - một cấu truc ngôn ngữ đặc biệt cho tình huống này. Bạn định nghĩa biến null bằng cách thêm vào kiểu dấu hỏi chấm. Đây là một ví dụ để minh họa sự khác biệt:

int notNullable = null; // Will cause an error from the compiler

int? nullable = null; // Just fine - it's nullable!

Điều này là hợp lệ với kiểu dữ liệu như integer, float, bool và struct. Chuỗi và đối tượng mặt khác là kiểu tham trị và không thể khai báo null vì chúng có thể nhận giá trị null.

Checking a nullable for null

Vậy bạn đã định nghĩa biến có thể nul. Để kiểm tra thì bạn có thể làm theo hai cách: chỉ so sánh biến với từ khóa null như với kiểu dữ liệu khác, hay dùng thuộc tính HasValue mà đối tượng null thừa kế từ cấu trúc System.Nullable. Đây là ví dụ:

int? nullable = null;  
if (nullable == null)  
    Console.WriteLine("It's a null!");  
if (!nullable.HasValue)  
    Console.WriteLine("It's a null!");

Kết quả giống nhau, vì vậy dùng bất kỳ phương thức nào bạn thấy dễ đọc và dễ hiểu. Vì giá trị của chúng ta có thể null thì bạn nên kiểm tra trước khi dùng nó - hay nói cách khác, bạn có thể có Ngoại lệ.

Using the value of a nullable

Từ System.Nullable, một đối tượng nullable được thừa kế từ thuộc tính Value. Nó có thể được dùng để có giá trị thực sự từ đối tượng nullable. Tuy nhiên, với phép so sánh thông thường, ví dụ dùng == và != thì C# cho phép bạn bỏ qua thuộc tính Value và chỉ so sánh trực tiếp với đối tượng nullable. Hay nói cách khác, cả hai ví dụ này cùng thực hiện một thứ:

int? nullable = 42;

if (nullable.Value == 42)  
    Console.WriteLine("It's 42!");  

if (nullable == 42)  
    Console.WriteLine("It's 42!");

Đối tượng nullable luôn đến cùng một kiểu dữ liệu cơ bản, ví dụ một số nguyên như trong ví dụ trước. Trong khi những kiểu dữ liệu này có giá trị mặc định thì giá trị măc định của nullable luôn là null. Đó là lý do tại sao bạn phải kiểm tra null trước khi cố gắng dùng giá trị như đã mô tả trước đó. Tuy nhiên, một kiểu nullable thừa kế helper method mà bạn có thể dùng: GetValueOrDefault(). Nó sẽ trả về giá trị của đối tượng nullable, nếu nó không null thì nó sẽ trả về giá trị mặc định. Vì vậy, cho một số nguyên nullable thì nó có thể trả về 0, cho kieur boolean nullable thì nó sẽ trả về false và như vậy. Nó cho phép bạn xử lý cả hai và kiểm tra câu lệnh sau:

if ((nullable.HasValue) && (nullable.Value == 42))
    Console.WriteLine("It's 42!");

if(nullable.GetValueOrDefault() == 42)
    Console.WriteLine("It's 42!");

Như bạn thấy, ví dụ sau ngắn hơn và dễ hơn để đọc, trong khi cùng làm một thứ.

Summary

Value types in C#, like integers and booleans, always have a default value. If you want to work around this behavior, e.g. because you need to differentiate between 0 and null, or because you need to know whether the user has actively selected "false" for something or if the variable just holds the default value of false, then you can make the variable nullable by postfixing the type with a ? (question mark).


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!