25

Resharper は、このコードの「else」が冗長であると言っています。

if(a)
{
   //Do Something
}
else if(b)
{
   //Do Something
}

が true の場合はが評価されないため、はelse冗長に見えません。が変数の場合、追加のオーバーヘッドはわずかですが、式の場合もあります。elsebabb

これは正しいです?

4

3 に答える 3

44

最初の -block 内にある種のbreakcontinuereturn、またはthrowステートメント (または) があり、常に実行が現在のブロックの外に分岐する場合は冗長です。gotoif

if(a)
{
    return 0;
}
else if(b)
{
    return 1;
}

この場合、コードが最初のブロックに入ると、2 番目のブロックに入る方法がないため、次のようになります。

if(a)
{
    return 0;
}
if(b)
{
    return 1;
}
于 2013-11-14T23:21:34.673 に答える
7

この場合、あなたは正しいですが、これが彼らが最初からそれを持っていたと私が考える理由です:

特定の if-else 条件では、else 句を削除できます。次の方法を検討してください。

public int Sign(double d)
{
    if (d > 0.0)
        return 1;
    else
        return -1;
}

上記では、 if 句がメソッドから返されるため、else ステートメントを安全に削除できます。したがって、else がなくても、if 句本体を通過することはできません。

于 2013-11-14T23:21:43.453 に答える
0

私には冗長に見えません。else を削除すると、 と の両方が true の場合、異なるプログラム フローにaなります。b

于 2013-11-14T23:20:17.420 に答える