我正在努力解决验证三个对象(A、B、C)的问题
这是我的条件
我想解决它,而不需要太多 if 表达式和创建可怕的代码。
那么
A B C
A 1 0 0
B 0 1 0
C 0 0 1
正如它所表明的,我需要实现类似这个伪表的东西,然后只有其中一个可以为真,而其他所有都是假的
决赛
什么表达式可以提供这样的验证?
创建一个辅助方法来执行此操作(通过测试),然后根据您的意愿让代码变得混乱或干净,以实现您的目标。
这是一个相当简单的实现;保证每次正好检查 3 次。
public static bool OnlyOneNotNull(object object1, object object2, object object3)
{
if (object1 != null)
return object2 == null && object3 == null;
if (object2 != null)
return object3 == null;
return object3 != null;
}
用法很简单:
if (OnlyOneNotNull(A, B, C))
{
//do something
}
以克里斯的回答为基础。下面的代码更通用,因为它可以采用可变数量的参数。您还可以更新它以获取它应该检查的非空对象的数量。
public static bool OnlyOneNotNull(params object[] objects)
{
int? numNotNull = objects?.Count(o => o != null);
return numNotNull == 1;
}