2010-10-05 47 views
6

thể trùng lặp:
What is the “??” operator for?Việc sử dụng "??" là gì?

hãy giải thích cho tôi là những gì sử dụng "??" trong mã dưới đây và "??" được dùng cho.

if ((this.OrderDate ?? DateTime.MinValue) > DateTime.Today) 

{ e.Description = "Ngày đặt hàng không được trong tương lai."; trả về false; }

mã trên là tại http://nettiers.com/EntityLayer.ashx

Cảm ơn.

+3

'??' như vậy có thể là khó để tìm kiếm, nhưng tìm kiếm "C# syntax" hoặc "C# operator" khá nhanh chóng đưa bạn đến câu trả lời –

Trả lời

9

(Đây là một bản sao, nhưng thật khó để tìm kiếm, vì vậy tôi đủ hạnh phúc để cung cấp thêm mục tiêu khác cho các tìm kiếm tương lai ...)

Đó là null-coalescing operator. Về cơ bản nó đánh giá toán hạng đầu tiên, và nếu kết quả là null (hoặc tham chiếu null hoặc giá trị null cho một kiểu giá trị nullable) thì nó sẽ đánh giá toán hạng thứ hai. Kết quả là toán hạng nào được đánh giá cuối cùng, hiệu quả.

Lưu ý rằng do associativity của nó, bạn có thể viết:

int? x = E1 ?? E2 ?? E3 ?? E4; 

nếu E1, E2, E3E4 đều biểu hiện kiểu int? - nó sẽ bắt đầu với E1 và tiến bộ cho đến khi nó tìm thấy một phi giá trị null.

Toán hạng đầu tiên phải là một kiểu nullable, nhưng toán hạng thứ hai có thể không null, trong trường hợp này kiểu biểu thức tổng thể là không nullable. Ví dụ, giả E4 là một biểu hiện của loại int (nhưng tất cả phần còn lại vẫn int? sau đó bạn có thể làm cho x không nullable:

int x = E1 ?? E2 ?? E3 ?? E4; 
+0

thực sự hữu ích khi biết - nó hoạt động được trong hầu hết các ngôn ngữ lập trình không? –

+0

@Thomas: Không, chỉ C# theo như tôi biết. –

+0

@Thomas Clayson: Toán tử kết hợp không tồn tại cơ bản tồn tại trong [C# và Perl] (http://en.wikipedia.org/wiki/Null_coalescing_operator) kể từ phiên bản 5.10 (Cú pháp Perl là '//'). –

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