2012-10-03 33 views
19

Trong C#, nếu tôi viếtCác + = điều hành với các loại nullable trong C#

int? x = null; 
x += x ?? 1 

Tôi mong chờ điều này là tương đương với:

int? x = null; 
x = x + x ?? 1 

Và như vậy, trong ví dụ đầu tiên, x sẽ chứa 1 như trong ví dụ thứ hai. Nhưng nó không, nó chứa null. Toán tử + = dường như không hoạt động trên các kiểu nullable khi chúng chưa được gán. Tại sao cai nay lại la trương hợp đo?

Chỉnh sửa: Như đã chỉ ra, đó là vì null + 1 = null và ưu tiên người vận hành. Trong phòng của tôi, tôi nghĩ rằng dòng này trong MSDN là mơ hồ !:

Các nhà khai thác unary và nhị phân được xác định trước và bất kỳ người dùng định nghĩa nhà khai thác mà tồn tại với nhiều loại giá trị cũng có thể được sử dụng bởi nullable loại. Các toán tử này tạo ra một giá trị null nếu [một trong hai] các toán hạng là null; nếu không, toán tử sử dụng giá trị chứa để tính kết quả.

Trả lời

33

Đây là sự khác biệt giữa hai câu lệnh:

x += x ?? 1 
x = (x + x) ?? 1 

Thứ hai không phải là những gì bạn đang mong đợi.

Dưới đây là một phân tích về họ cả:

x += x ?? 1 
x += null ?? 1 
x += 1 
x = x + 1 
x = null + 1 
x = null 

x = x + x ?? 1 
x = null + null ?? 1 
x = null ?? 1 
x = 1 
+7

+1 Ah, nhà điều hành được ưu tiên, kẻ thù xưa của tôi. Bạn tấn công một lần nữa! – JDB

+0

Không '??' có ưu tiên hơn '+'? (@ Câu trả lời của Servy) –

+4

@AustinSalonen Không. http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –

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