1

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

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

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

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

4

2 回答 2

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;

于 2013-02-20T22:26:31.020 回答
0

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

public enum ThreeThings
{
  state1,
  state2,
  state3
}

对于枚举,给定一个有效的枚举值,它只能是三者之一。

于 2013-02-20T22:23:55.303 回答