我有一个对象可以有3个不同的布尔值状态变量。 规则是任何时候只有3个中的一个是真的。所有其他人都必须是假的。
我正在编写服务器端验证,需要确认此规则。 我可以使用一个简单的操作来测试只有一个状态是真的吗?
我更愿意避免使用三重If逻辑。
更新:这不是在ASP.NET中。传递的记录是3个布尔值。该对象通过json序列化传递。所以我正在处理给我的东西。
答案 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;
请注意,Enumerable.Count
需要using System.Linq;
答案 1 :(得分:0)
听起来你没有使用正确的类型 - 你应该使用具有三个值的枚举。
public enum ThreeThings
{
state1,
state2,
state3
}
使用枚举,给定有效的枚举值,它只能是三个中的一个。