2015-12-15 13 views
7

Số ? cho biết trong mã C# sau đây là gì?Cú pháp Dấu chấm hỏi về phương thức gọi

var handler = CallBack; 
handler?.Invoke(); 

Tôi đã đọc rằng bạn có thể sử dụng ? trước một loại để cho biết rằng đó là loại không có giá trị. Điều này có làm điều tương tự không?

+0

Đây là toán tử điều hướng an toàn, mới trong C# 6. Phải có bản sao ở đâu đó trên SO. – senshin

+2

Không, đây không phải là điều tương tự như tuyên bố một loại nullable. Những gì bạn đang thấy là cú pháp C# 6, được gọi là toán tử điều kiện 'null' – Jonesopolis

+1

Đây là [tài liệu] (https://msdn.microsoft.com/en-us/library/dn986595.aspx) – juharr

Trả lời

14

Đây là C# 6 mã sử dụng null conditional operator chỉ ra rằng mã này sẽ không ném một ngoại lệ NullReferenceException nếu handler là null:

Delegate handler = null; 
handler?.Invoke(); 

mà tránh bạn viết séc rỗng mà bạn sẽ phải làm trong các phiên bản trước của ngôn ngữ C#:

Delegate handler = null; 
if (handler != null) 
{ 
    handler.Invoke(); 
} 
+1

Tại sao lại phản ứng với điều này, khi nào nó rõ ràng là một sự lừa đảo? –

+5

@Lynn OP hỏi, "Cái gì? Chỉ ra trong mã C# sau?" Có phải câu trả lời cho câu hỏi đó, "Đó là cách tốt hơn để làm kiểm tra rỗng sâu"? Đó không phải là (IMO) một bản dupe tốt. Chỉ xảy ra là một câu trả lời có thể cho một câu hỏi cũ. –

+1

@GrantWinney Tôi cho rằng khi ai đó đến với câu hỏi này từ Google, họ sẽ thấy biển chỉ dẫn trỏ đến câu hỏi khác. Sau đó, họ sẽ đọc về cách trước đây không có cách nào ngắn gọn để thực hiện các kiểm tra có điều kiện, nhưng bây giờ có ... và họ sẽ có một "ah ha!" khoảnh khắc của các loại. –

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