我有一个对象可以有 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
}
对于枚举,给定一个有效的枚举值,它只能是三者之一。