2011-07-03 35 views
9

Tôi mới trong C#. Trong C# tôi không thể thiết lập giá trị của một cấu trúc để null làm thế nào tôi có thể tạo một cấu trúc với hỗ trợ giá trị null?Làm thế nào để tạo cấu trúc với hỗ trợ giá trị null?

+3

Bạn gần như chắc chắn không nên sử dụng cấu trúc ngay từ đầu. – SLaks

+0

Có lý do thuyết phục nào không thể được định nghĩa là lớp học thay thế không? – juharr

Trả lời

14

Struct và các loại giá trị có thể được thực hiện nullable bằng Generic Nullable <> lớp để quấn nó. Ví dụ:

Nullable<int> num1 = null; 

C# cung cấp một tính năng ngôn ngữ cho điều này bằng cách thêm một dấu hỏi sau khi loại:

int? num1 = null; 

Cùng nên làm việc cho bất kỳ loại giá trị bao gồm cấu trúc.

MSDN Giải thích: Nullable Types (c#)

3

bạn có thể sử dụng Nullable<T> cho cấu trúc, hoặc các hình thức viết tắt của cùng (?):

Đại diện cho một đối tượng có tiềm ẩn type là một kiểu giá trị mà cũng có thể là giao rỗng như một loại tài liệu tham khảo .

struct Foo 
{ 
} 

Nullable<Foo> foo2 = null; 
Foo? foo = null; //equivalent shorthand form 
5

Bạn có thể sử dụng Nullable<T> trong đó có một bí danh trong C#. Hãy nhớ rằng cấu trúc chính nó không thực sự là null (Trình biên dịch xử lý null khác nhau đằng sau hậu trường). Nó có nhiều hơn một số Option type.

Struct? value = null; 

Vì @CodeInChaos đề cập đến Nullable<T> chỉ được đóng hộp khi ở trạng thái không trống.

Nullable Types

Boxing Nullable Types

+2

'Nullable ' không chỉ là compilermagic. Nó cũng được hỗ trợ bởi phép thuật CLR. Ví dụ, một hộp 'null' nullable thành' null' thực. – CodesInChaos

2

Kể từ khi "Struct" không phải là một loại tài liệu tham khảo, bạn không thể gán "null" như cách thông thường. vì vậy, bạn cần phải sử dụng biểu mẫu sau để làm cho biểu mẫu "có thể bị vô hiệu"

[Tên cấu trúc]? [Tên biến] = null

ví dụ:

Color? color = null; 

sau đó bạn có thể gán giá trị rỗng cho đối tượng và cũng kiểm tra tính khả dụng bằng cách sử dụng câu lệnh có điều kiện.

Các vấn đề liên quan