我有一個對象,可以有3個不同的布爾狀態變量。 規則是在任何時候只有三個可以是真的。所有其他人必須是虛假的。簡單按位操作的三個狀態變量
我正在寫服務器端驗證,並需要確認此規則。 是否有一個簡單的操作,我可以使用它只會測試一個狀態爲真?
我更喜歡避免三重If邏輯。
更新:這不是在ASP.NET中。正在通過的記錄是3個布爾值。該對象通過json序列化傳遞。所以我正在處理給我的東西。
我有一個對象,可以有3個不同的布爾狀態變量。 規則是在任何時候只有三個可以是真的。所有其他人必須是虛假的。簡單按位操作的三個狀態變量
我正在寫服務器端驗證,並需要確認此規則。 是否有一個簡單的操作,我可以使用它只會測試一個狀態爲真?
我更喜歡避免三重If邏輯。
更新:這不是在ASP.NET中。正在通過的記錄是3個布爾值。該對象通過json序列化傳遞。所以我正在處理給我的東西。
如果你的對象有三個bool
性能,只有一個應該是true
,我喜歡這種方法:
public static int TrueCount(params bool[] booleans)
{
return booleans.Count(b => b);
}
然後很簡單:
bool onlyOneTrue = TrueCount(obj.Pprop1, obj.Prop2, obj.Prop3) == 1;
注意Enumerable.Count
需要using System.Linq;
聽起來像你沒有使用正確的類型 - 你應該使用三個值的枚舉。
public enum ThreeThings
{
state1,
state2,
state3
}
使用枚舉,給定一個有效的枚舉值,它只能是其中的一個。
(a&!b&!c)| (!a&b&!c)| (!a&!b&c) – 2013-02-20 22:34:27
@AkramBerkawy:現在和10個'bools'一樣;) – 2013-02-20 22:38:38
@TimSchmelter:問題是:三個狀態變量的簡單按位運算:D我是誰對你的答案投了票;) – 2013-02-20 22:42:09