2012-12-31 38 views
10

Tôi có bốn biến bool, nói:kiểm tra xem bốn biến boolean có giá trị bằng nhau, không rõ ràng không?

bool a=true; 
bool b=false; 
bool c=true; 
bool d=false; 

sau đó tôi muốn kiểm tra xem bốn đều bình đẳng. Tuy nhiên;

Console.WriteLine(true == false == true == false); 
true 

Tại sao điều này xảy ra? Tôi nghĩ rằng đó là vì trật tự evalution của một phương trình, mà đi từ trái sang phải:

((true == false) == true) == false 
(false == true) == false 
false == false 
true 

sau đó một cách thích hợp để kiểm tra xem tất cả các N> 2 biến boolean đều bình đẳng là gì?

+1

Giả định của bạn là chính xác. Nếu cùng một toán tử được sử dụng xuyên suốt một biểu thức ... toán tử ưu tiên có nghĩa là không có gì .. tất cả đều giống nhau .. –

Trả lời

7
if(a==b && a==c && a==d) 

Nếu bạn có số biến của bools không chỉ 4

var bools = new bool[] { a, b, c, d }; 
var areAllEqual = bools.Skip(1).All(b=>b==bools[0]); 
+1

+1 oops, bạn đã đề cập đến mảng đó (Ngoài ra bạn cũng có thể sử dụng lệnh thay vì bool [0] kể từ khi bạn đã có giá trị) – V4Vendetta

2

Tôi đoán bạn có thể thêm đặt chúng vào một mảng và n sử dụng tất cả các nhà khai thác

yourboolarray.All(x=>x == a) // compare with any a,b,c,d 
1

bạn có thể xem xét sử dụng các phương pháp Bitwise cho điều này

nơi bởi các đại diện số nguyên của bools sẽ bằng 0 hoặc 15 (hoặc bất kỳ giá trị tùy thuộc vào số bit)

có thể yêu cầu tái cấu trúc mã mặc dù

+0

Cái gì? Không. Nếu bạn định chuyển đổi chúng thành int, bạn cũng có thể đếm chúng. Nhưng thực sự, các giá trị nên được để lại trong các loại 'tự nhiên' của chúng, không được đúc như thế này. –

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