三个状态变量的简单按位运算

时间:2013-02-20 22:18:45

标签: c#-4.0 logic

我有一个对象可以有3个不同的布尔值状态变量。 规则是任何时候只有3个中的一个是真的。所有其他人都必须是假的。

我正在编写服务器端验证,需要确认此规则。 我可以使用一个简单的操作来测试只有一个状态是真的吗?

我更愿意避免使用三重If逻辑。

更新:这不是在ASP.NET中。传递的记录是3个布尔值。该对象通过json序列化传递。所以我正在处理给我的东西。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

听起来你没有使用正确的类型 - 你应该使用具有三个值的枚举。

public enum ThreeThings
{
  state1,
  state2,
  state3
}

使用枚举,给定有效的枚举值,它只能是三个中的一个。