2010-08-11 42 views
10

Xem tiêu đề chuỗi. Tôi có thể làm điều gì đó an toàn như vậy mà không phải lo lắng về một số NullReferenceException hoặc không được đảm bảo rằng những biểu thức boolean đó sẽ được đánh giá từ trái sang phải không?Có an toàn để kiểm tra một đối tượng cho null và trong cùng câu lệnh if so sánh giá trị thuộc tính của đối tượng không?

// can this throw an NRE? 
if (obj == null || obj.property == value) 
{ 
    // do something 
} 
+9

Trong khi q này. là về C#, trong trường hợp bạn cần phải làm VB, nó thường bị quên rằng VB.NET theo mặc định * không thực hiện đánh giá ngắn mạch * cho 'Or' và' And', có thể giới thiệu các lỗi khó tìm. Tuy nhiên, các từ khóa 'OrElse' và' AndAlso' đã được giới thiệu để hỗ trợ sự thiếu hụt rõ ràng này. – Abel

+0

'OrElse' cũng đã mở ra cánh cửa cho một loạt trò đùa què quặt giữa nhóm VB ..." Hãy làm ... 'OrElse' ..." – corsiKa

Trả lời

20

Chúng sẽ được đánh giá từ trái sang phải, được bảo đảm. Vì vậy, có, an toàn của nó.

Các điều kiện-OR (||) thực hiện một logic-OR của bool toán hạng của nó, nhưng chỉ đánh giá toán hạng thứ hai của nó nếu cần thiết.

http://msdn.microsoft.com/en-us/library/6373h346%28VS.71%29.aspx

+0

tuyệt vời, cảm ơn bạn –

+7

Thông báo trước sẽ là nếu có một chuỗi có thể thay đổi giá trị của đối tượng từ không null, thành null, giữa việc thực hiện các đánh giá bên trái và bên phải. Đó sẽ là một vấn đề hiếm gặp, có thể xảy ra. – umbyersw

+1

Vâng, nó là an toàn về mặt thứ tự đánh giá biểu hiện. Tuy nhiên, nó không phải là chủ đề an toàn nếu nhiều chủ đề có thể truy cập biến obj – Mahol25

1

Đó là hoàn toàn an toàn để làm. Nếu biểu thức đầu tiên bên trái là đúng, thì phần còn lại không được đánh giá.

+0

Ở bên trái, ý bạn là. –

+0

Tôi tin rằng câu trả lời của bạn sẽ chính xác nếu nó thay vào đó đọc: "... trên * left * là * true *, ..." – umbyersw

+2

;) Cảm ơn, có lẽ tôi cần lấy một số "Tay trái, tay phải" găng tay. Và cũng nên kiểm tra mắt để tôi không thấy || như && – DavidGouge

1

Điều này thực sự an toàn. Xem tài liệu C# cho ||&& (tất nhiên là ngược lại, đoản mạch sai).

(Về "x || y")

nếu x là đúng, y là không được đánh giá (vì kết quả của OR hoạt động là đúng, bất kể giá trị của y có thể là). Điều này được gọi là đánh giá "ngắn mạch" .

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