2012-02-27 6 views
0

何らかの理由でこれが正しく表示されません。これを書き込むより良い方法はありますか? '!月曜日の場合..'負の返信文の場合

私は私が持っていると思う
if (!(auth.DoesAuthMatch && auth.DoesEmailMatch)) 
{ 
    statusText = "Access Denied"; 
} 

+2

ドモルガンの法則:http://en.wikipedia.org/wiki/De_Morgan's_laws – siride

+0

常に見てhttp://en.wikipedia.org/wiki/De_Morgan%27s_laws – rerun

答えて

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

メソッドにリファクタリングする必要があるのはなぜですか? – siride

+0

@サイード:コードが何をしているかを見るには、呼び出されたメソッドを追跡する必要があります。ロジックは明らかですが、私の考えでは、コードを理解しようとするのは難しいです。 –

+0

私は@Odedを選択しました。これは、他のソリューションとリソースへのリンクの例を示しています。すべての反応はほぼ同じで、わずかな違いがありました。私は使用しました '(!(auth.DoesAuthMatch && auth.DoesEmailMatch))' 月曜日の早い者の応答に感謝します。 –

2

それは結構です - 同等では次のようになります。

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

コードが右に見えます。

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

または多分:

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

比較ブール値を 'true/false'に設定すると火災の危険があります。 – Oded

+1

@Oded:あなたはそれに理由があるのですか、それとも独断的になっていますか? –

+0

私はそのような構造が冗長で読みにくいことがわかります。もしあなたがそれをスタイルの問題と呼んでください。 – Oded

0

さてあなたは、メソッドへ...

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

それを反転するだけで何が問題になりますか?私はコードを読むときに正の論理が理解するのが早いことがわかります。

例:

if (auth.DoesAuthMatch && auth.DoesEmailMatch) 
{  
    statusText = "Access Granted"; 
} 
else 
{ 
    statusText = "Access Denied"; 
} 
関連する問題