2013-01-14 26 views
8

câu hỏi liên quan đến toán tử BOOLEAN '|' và '||'. Sự khác biệt duy nhất tôi có thể tìm thấy giữa hai nhà khai thác này là; khi sử dụng '||' the right side of the expression will not be evaluated if the left side is true.C# toán tử logic - bình thường và ngắn mạch

Tùy chọn ngoài sở thích của người tại sao một người dùng '|' trên '||' để kiểm tra boolean?

if(true | false) 
{ 
do something 
} 

vs 
if (true || false) 
{ 
do something 
} 
+1

Để đảm bảo rằng phía bên phải của biểu thức cũng được đánh giá mặc dù bên trái là đúng, hoặc bây giờ tôi chỉ nói rõ ràng? Không thể thực hiện được rằng bạn muốn thực hiện 2 thao tác nếu chỉ một trong số chúng kết quả là đúng, cái gì khác cần phải xảy ra? Có vẻ như một trường hợp có thể xảy ra với tôi. – Bazzz

Trả lời

17

Đó chủ yếu là một vấn đề nếu các hoạt động có tác dụng phụ:

xem xét như sau:

using(IEnumerator iterator1 = args.GetEnumerator()) 
using (IEnumerator iterator2 = args.GetEnumerator()) 
{ 
    while (iterator1.MoveNext() | iterator2.MoveNext()) 
    { 
     //do stuff 
    } 
} 

MoveNext hoạt động gây ra tác dụng phụ có thể là quan trọng đối với cả bên của | để được thực hiện bất kể việc đầu tiên có đúng hay không.

+2

Ví dụ tốt :) –

+0

Trong trường hợp '&' có một sự khác biệt: booleans không phải là 0 hoặc 1 trên CLR vì vậy '(bool) 1 & (bool) 2' là' false'! (Không hợp lệ C# nhưng có thể được xây dựng bằng cách sử dụng IL). – usr

3

Bên ngoài ưu tiên người tại sao một sử dụng '|' trên '||' để kiểm tra boolean?

Chính xác vì bạn có thể muốn cả hai bên được đánh giá. Có thể có những tác dụng phụ mà bạn cần phải xảy ra theo cách nào đó.

Rất hiếm, nhưng điều đó là khả thi.

+8

Và cũng là nguyên nhân gây ra lỗi "vui nhộn". :) – JerKimball

4

lý do tại sao một người dùng '|' trên '||' để kiểm tra boolean?

Nếu (vì lý do nào đó) phía bên phải có tác dụng phụ mà bạn cần phải xảy ra.

Điều này thường không phải là thực tiễn tốt.

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