2013-06-28 30 views
5

Gần đây tôi đã nhận thấy sự tò mò (ít nhất là đối với tôi). Tôi nghĩ rằng các null-coalescing operator sẽ được ưu tiên hơn bất kỳ hoạt động toán học nhưng rõ ràng là tôi đã sai. Tôi nghĩ sau hai biến sẽ có cùng giá trị ở cuối:Tại sao tôi cần phải đặt toán tử null-coalescing trong ngoặc?

double? previousValue = null; 
double? v1 = 1 + previousValue ?? 0; 
double? v2 = 1 + (previousValue ?? 0); 

Nhưng v2.Value được (mong muốn) 1 khi v1.Value vẫn là 0. Tại sao?

Demo

+0

có thể trợ giúp: http://en.csharp-online.net/ECMA-334%3a_14.2.1_Operator_precedence_and_associativity cũng http : //stackoverflow.com/questions/511093/what-is-the-operator-precedence-of-c-sharp-null-coalescing-operator – Ric

Trả lời

8

v1 là 0 vì lý do chính xác mà bạn đề cập: nhà điều hành null-coalescing thực sự có độ ưu tiên tương đối thấp. This table cho biết chính xác mức độ thấp.

Vì vậy, đối với biểu hiện đầu tiên, 1 + null được đánh giá đầu tiên, và nó để đánh giá một null int?, sau đó coalesces để 0.

1

v2 đang nói, 1 cộng (nếu PREVIOUSVALUE == null thêm vào 1 giá trị 0 , cung cấp cho 1.The v1 là nói 1 cộng với null là null để cho phép trả lại 0.

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