Biểu tượng ?
sau một loại chỉ là lối tắt đến Nullable type, bool?
tương đương với Nullable<bool>
.
bool
là một value type, điều này có nghĩa rằng nó không thể là null
, vì vậy các loại Nullable về cơ bản cho phép bạn quấn các loại giá trị, và có thể gán null
đối với họ.
bool?
có thể chứa ba giá trị khác nhau: true
, false
và null
.
Ngoài ra, không có nhà khai thác ngắn mạch (& & ||) định nghĩa cho bool?
Chỉ có logic AND, bao gồm OR, các nhà khai thác được định nghĩa và họ cư xử như thế này:
x y x & y x | y
true true true true
true false false true
true null null true
false true false true
false false false false
false null false null
null true null true
null false false null
null null null null
Loại Nullable về cơ bản là cấu trúc chung, có các thuộc tính công khai sau:
public struct Nullable<T> where T: struct
{
public bool HasValue { get; }
public T Value { get; }
}
Thuộc tính HasValue
cho biết đối tượng hiện tại có giá trị không và thuộc tính Value
sẽ nhận giá trị hiện tại của đối tượng hoặc nếu HasValue là sai, nó sẽ ném InvalidOperationException.
Bây giờ bạn phải tự hỏi điều gì đó, Nullable là một cấu trúc, một loại giá trị không thể rỗng, vậy tại sao câu lệnh sau đây là hợp lệ?
int? a = null;
Đó dụ sẽ biên dịch thành này:
.locals init (valuetype [mscorlib]System.Nullable`1<int32> V_0)
IL_0000: ldloca.s V_0
IL_0002: initobj valuetype [mscorlib]System.Nullable`1<int32>
Một cuộc gọi đến initobj, khởi tạo từng lĩnh vực của các loại giá trị tại một địa chỉ cụ thể để một tham chiếu null hoặc 0 của các loại nguyên thủy thích hợp .
Vậy đó, những gì đang xảy ra ở đây là mặc định struct initialization.
int? a = null;
Tương đương với:
Nullable<int> a = new Nullable<int>();
có thể trùng lặp của [DateTime là gì? " có nghĩa là trong C#?] (http://stackoverflow.com/questions/109859/what-does-datetime-mean-in-c) – nawfal