检查三个对象不为空或只有其中两个可以为空的最有效方法

问题描述 投票:0回答:2

我正在努力解决验证三个对象(A、B、C)的问题

这是我的条件

  • 其中任何一个都不能为空
  • 其中最多有一个不能为空

我想解决它,而不需要太多 if 表达式和创建可怕的代码。

那么

  A  B  C
A 1  0  0
B 0  1  0
C 0  0  1

正如它所表明的,我需要实现类似这个伪表的东西,然后只有其中一个可以为真,而其他所有都是假的

决赛

什么表达式可以提供这样的验证?

c# validation if-statement comparison
2个回答
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
}

0
投票

以克里斯的回答为基础。下面的代码更通用,因为它可以采用可变数量的参数。您还可以更新它以获取它应该检查的非空对象的数量。

    public static bool OnlyOneNotNull(params object[] objects)
    {
       int? numNotNull = objects?.Count(o => o != null);
       return numNotNull == 1;
    }
© www.soinside.com 2019 - 2024. All rights reserved.