Câu trả lời:
Điều đó có nghĩa là loại giá trị trong câu hỏi là loại không thể
Các kiểu không thể là các thể hiện của cấu trúc System.Nullable. Một loại nullable có thể biểu thị phạm vi giá trị chính xác cho loại giá trị cơ bản của nó, cộng với một giá trị null bổ sung. Ví dụ: a
Nullable<Int32>
, phát âm là "Nullable of Int32", có thể được gán bất kỳ giá trị nào từ -2147483648 đến 2147483647 hoặc có thể được gán giá trị null. ANullable<bool>
có thể được gán các giá trị true, false hoặc null. Khả năng gán null cho các kiểu số và Boolean đặc biệt hữu ích khi bạn đang xử lý cơ sở dữ liệu và các loại dữ liệu khác có chứa các phần tử có thể không được gán một giá trị. Ví dụ: trường Boolean trong cơ sở dữ liệu có thể lưu trữ các giá trị đúng hoặc sai hoặc có thể không xác định.class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
int
loại và một Integer
lớp tương ứng , ví dụ.
Nó là một tốc ký cho Nullable<int>
. Nullable<T>
được sử dụng để cho phép một loại giá trị được đặt thành null
. Các loại giá trị thường không thể là null .
value types
không thể rỗng. Nếu bạn khai báo một int hoặc bool (là các loại giá trị) mà không chỉ định cụ thể một giá trị, thì chúng vẫn sẽ có các giá trị (0 và false, tương ứng), tức là. họ sẽ không có giá trị reference types
Mặt khác, không được gán , chẳng hạn như đối tượng hoặc MyClass, sẽ là null. Bạn có thể muốn đọc về sự khác biệt giữa các loại giá trị và loại tham chiếu.
Trong
x ? "yes" : "no"
cái gì? tuyên bố một câu nếu . Ở đây: x đại diện cho điều kiện boolean; Phần trước câu : là câu sau đó và phần sau là câu khác .
Trong, ví dụ,
int?
cái gì? khai báo một loại nullable và có nghĩa là loại trước nó có thể có giá trị null.
return value ? value : "isNull";
nói với tôi rằng string value
không thể chuyển đổi thành bool.
Các kiểu không thể là các thể hiện của cấu trúc System.Nullable. Một loại nullable có thể biểu thị phạm vi giá trị bình thường cho loại giá trị cơ bản của nó, cộng với một giá trị null bổ sung . Ví dụ: [
Nullable<Int32>
], được phát âm là "Nullable of Int32", có thể được gán bất kỳ giá trị nào từ -2147483648 đến 2147483647 hoặc có thể được gán giá trị null. Một [Nullable<bool>
] có thể được gán các giá trị đúng hoặc sai hoặc null. Khả năng gán null cho các kiểu số và Boolean đặc biệt hữu ích khi xử lý cơ sở dữ liệu và các loại dữ liệu khác có chứa các phần tử có thể không được gán một giá trị. Ví dụ: trường Boolean trong cơ sở dữ liệu có thể lưu trữ các giá trị đúng hoặc sai hoặc có thể không xác định.
Nó tuyên bố rằng loại này là nullable.
sử dụng thực tế:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
Để thêm vào các câu trả lời ở trên, đây là một mẫu mã
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
Điều này sẽ cung cấp một lỗi biên dịch:
Lỗi 12 Không thể chuyển đổi null thành 'Kiểm tra' vì đây là loại giá trị không thể rỗng
Lưu ý rằng không có lỗi biên dịch cho NullableTest. (lưu ý? trong phần khai báo của t2)
int?
là tốc ký cho Nullable<int>
. Hai hình thức có thể thay thế cho nhau.
Nullable<T>
là một toán tử mà bạn có thể sử dụng với một loại giá trị T
để làm cho nó chấp nhận null
.
Trong trường hợp bạn không biết nó: giá trị loại là loại chấp nhận các giá trị như int
, bool
, char
vv ...
Họ không thể chấp nhận tham chiếu đến các giá trị: họ sẽ tạo ra lỗi thời gian biên dịch nếu bạn gán cho họ một null
, trái ngược với các loại tham chiếu , rõ ràng có thể chấp nhận nó.
Tại sao bạn cần điều đó? Bởi vì đôi khi các biến loại giá trị của bạn có thể nhận được các tham chiếu null được trả về bởi thứ gì đó không hoạt động tốt, như biến bị thiếu hoặc không xác định được trả về từ cơ sở dữ liệu.
Tôi khuyên bạn nên đọc Tài liệu Microsoft vì nó bao quát chủ đề khá tốt.