2015-09-23 17 views
5

C# 6.0 cho biết thêm ?. điều hành này mới mà bây giờ cho phép để gọi những sự kiện như vậy:Tôi có thể sử dụng toán tử điều kiện null thay vì mẫu tăng sự kiện cổ điển không?

someEvent?.Invoke(sender, args); 

Bây giờ, từ những gì tôi đọc, toán tử này đảm bảo rằng someEvent được đánh giá một lần. Là nó đúng để sử dụng loại gọi thay vì mô hình cổ điển:

var copy = someEvent 

if(copy != null) 
    copy(sender, args) 

Tôi nhận thức được certain scenarios nơi trên phiên bản của mô hình sẽ yêu cầu khóa bổ sung, nhưng chúng ta hãy giả định trường hợp đơn giản.

+2

Có. Và có một bài đăng blog của Jon Skeet về việc làm điều đó. – i3arnon

+1

Nó thực sự là một tập hợp các toán tử: '? .','? ['. –

+0

@Paulo Morgado, tôi đã sửa nó trong câu hỏi, tuy nhiên tôi đã tìm thấy trong khung nhìn cây cú pháp Linqpad5, rằng nó là duy nhất '?' Được phân tích cú pháp như một toán tử, sau '[0]' được phân tách thành 'SingleMemberAccessExpression hoặc một số biểu thức khác trong trường hợp truy cập '.'. –

Trả lời

9

Xem Null-conditional Operators on MSDN.

Có một ví dụ bao gồm những gì bạn hỏi

Nếu không có các nhà điều hành có điều kiện vô

var handler = this.PropertyChanged; 
if (handler != null) 
    handler(…) 

Với các nhà điều hành có điều kiện vô

PropertyChanged?.Invoke(e) 

Cách mới được thread-an toàn vì trình biên dịch tạo mã để đánh giá PropertyChanged một lần duy nhất, giữ kết quả trong biến tạm thời.

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