2013-02-20 38 views
1

我有一個對象,可以有3個不同的布爾狀態變量。 規則是在任何時候只有三個可以是真的。所有其他人必須是虛假的。簡單按位操作的三個狀態變量

我正在寫服務器端驗證,並需要確認此規則。 是否有一個簡單的操作,我可以使用它只會測試一個狀態爲真?

我更喜歡避免三重If邏輯。

更新:這不是在ASP.NET中。正在通過的記錄是3個布爾值。該對象通過json序列化傳遞。所以我正在處理給我的東西。

+0

(a&!b&!c)| (!a&b&!c)| (!a&!b&c) – 2013-02-20 22:34:27

+0

@AkramBerkawy:現在和10個'bools'一樣;) – 2013-02-20 22:38:38

+0

@TimSchmelter:問題是:三個狀態變量的簡單按位運算:D我是誰對你的答案投了票;) – 2013-02-20 22:42:09

回答

2

如果你的對象有三個bool性能,只有一個應該是true,我喜歡這種方法:

public static int TrueCount(params bool[] booleans) 
{ 
    return booleans.Count(b => b); 
} 

然後很簡單:

bool onlyOneTrue = TrueCount(obj.Pprop1, obj.Prop2, obj.Prop3) == 1; 

Demo

注意Enumerable.Count需要using System.Linq;

0

聽起來像你沒有使用正確的類型 - 你應該使用三個值的枚舉。

public enum ThreeThings 
{ 
    state1, 
    state2, 
    state3 
} 

使用枚舉,給定一個有效的枚舉值,它只能是其中的一個。