如果声明带负回报

时间:2012-02-27 16:57:56

标签: c#

由于某种原因,这看起来不正确。有没有更好的方法来编写/折射它?

if (!(auth.DoesAuthMatch && auth.DoesEmailMatch))
{
    statusText = "Access Denied";
}

我想我有一个'周一的案例!'

5 个答案:

答案 0 :(得分:5)

重构方法:

private bool IsAccessDenied(Auth auth)
{
    return !(auth.DoesAuthMatch && auth.DoesEmailMatch);
}

if (IsAccessDenied(auth))
{
    statusText = "Access Denied";
}

至于布尔逻辑:

!(auth.DoesAuthMatch && auth.DoesEmailMatch) == 
(!auth.DoesAuthMatch || !auth.DoesEmailMatch)

De Morgan's Laws的简单应用。

答案 1 :(得分:2)

很好 - 相当于:

if (!auth.DoesAuthMatch || !auth.DoesEmailMatch)
{
    statusText = "Access Denied";
}

答案 2 :(得分:2)

代码看起来正确。但可能更具可读性:

if (!auth.DoesAuthMatch || !auth.DoesEmailMatch)

或者甚至可能:

if (auth.DoesAuthMatch == false || auth.DoesEmailMatch == false)

答案 3 :(得分:1)

反转它有什么问题?我发现在阅读代码时可以更快地理解正面逻辑。

e.g:

if (auth.DoesAuthMatch && auth.DoesEmailMatch)
{     
    statusText = "Access Granted"; 
}
else
{
    statusText = "Access Denied";
}

答案 4 :(得分:0)

你可以把它改成......

if (!auth.DoesAuthMatch || !auth.DoesEmailMatch) statusText = "Access Denied";