繁体   English   中英

验证多个属性需要一个

[英]Validation multiple properties required one

我正在寻找更好的方法来解决以下情况。 我现在不想使用反射,而是将逻辑提升到第 n 级。 代码应该是简单的 C# 没有属性验证。 因为这是后端代码验证。 我很想解决这个问题,比如 XOR 或类似的运算符。

设想:

我在 class 中有三个字段(可以是 4、5、nth)。 三个用户中的一个必须 select 只有一个字段。 如果没有,则选择了两个或更多字段,我们需要抛出异常。

代码:

// no type defined for item
if ( hasUserId==false
    && hasSigningGroup==false
    && hasAssignedAgent == false)
{
    throw new Exception("No type defined for item.");
}
else
{
    if ((hasSigningGroup && hasUserId)|| (hasSigningGroup && hasAssignedAgent)|| (hasUserId && hasAssignedAgent))
    {
        throw new Exception("User ID , Signing group or assigned agent. Only one property can be set.");
    }
}

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators逻辑异或运算符^

“ ^ 运算符计算其操作数的逻辑异或,也称为逻辑 XOR。如果 x 计算结果为真且 y 计算结果为假,或者 x 计算结果为假且 y 计算结果为真,则 x ^ y 的结果为真. 否则,结果为假。也就是说,对于 bool 操作数,^ 运算符计算与不等运算符相同的结果。=。

你也可以使用.=。

我相信这就是您正在寻找的。

编辑:由于逻辑缺陷而删除了代码示例。 答案仍然是 ^ or.= 作为 XOR 运算符。

伙计们,我找到了解决这个问题的简单方法。这适用于所有情况。 XOR 和.= 运算符都不起作用。

            int result = Convert.ToInt32(hasUserId) + Convert.ToInt32(hasSigningGroup) + Convert.ToInt32(hasAssignedAgent);

            if (result != 1)
            {
                throw new Exception("User ID , Signing group or assigned agent. Please set one property.");
            }

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM