2

管理を任されたMVCWebアプリケーションをデプロイする準備ができました(アプリケーションは作成しませんでした)。プロジェクトは現在、エラーなしで本番モードでコンパイルされていますが、いくつかの警告があります。正確には9です。

これで6つはテストプロジェクトに関係しますが、Webプロジェクトに関係するものは2つあります。これらのエラーは次のとおりです。

到達不能コードが検出されました

どちらの場合も、これらの警告は戻り値にスローされます。

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    if (true)
    {
        return new ValidationResult("Passwords don't match", new string[] { OriginalProperty });
    }

    return null;
}

上記の例では、「return null」行は、到達不能コードの警告をスローします。

これはばかげた質問かもしれませんが(簡単に行ってください;-))、これらの警告はアプリケーションの機能にとってどれほど重要ですか?明らかにそれらは理由がありますが、エラーではないので、それらを無視して展開しても比較的大丈夫でしょうか?

4

3 に答える 3

3

条件ifは常にtrueif (true))と評価されるため、このメソッドは次と同等です。

protected override ValidationResult IsValid(object value, 
    ValidationContext validationContext)
{
    return new ValidationResult("Passwords don't match", 
        new string[] { OriginalProperty });
}

そのため、コンパイラの警告が表示されます。nullを返す最後の行はヒットできませんでした。警告を無視することに関する限り、決して無視しないことをお勧めします。警告が実行時に予期しない動作を引き起こす可能性がある場合があります。個人的には、警告をエラーとして扱うVSのオプションをチェックして、警告を見逃さないようにしています。

于 2010-11-13T13:55:02.747 に答える
1

ダリンが言ったこと。

この特定の警告は、実行時間、パフォーマンス、または信頼性に影響を与えません。ただし、開発中に、重要で関連性のある他のメッセージから(開発者として)気を散らすような警告メッセージが表示されないように、警告を取り除くようにしています。

return nullの新しく作成されたelseブランチにを入れてみることができますif。それでも実行されることはありませんが、に変更trueしたif場合falseでも、正しいコードが得られます。そのようにして警告を取り除くこともできます。

于 2010-11-13T14:00:43.010 に答える
0

プログラムの現在の動作を変更することなく、到達不能なコードを安全に削除できます。

到達不能コードの問題は、バグが明らかになる可能性があることです。

の代わりにif(something-that's-always-true)、おそらくプログラマーは本当にif(something-else-that's-sometimes-false). その場合、条件を修正する必要があるかもしれません。または、バグは実際にはユーザーが理解するようになった「機能」であり、それを変更すると動揺する可能性があります.

あるいは、本当は を使用するつもりだったのに、if(something-that's-always-true)それが常に true と評価されることを認識していなかったため、「念のため」到達不能なコードを記述したのかもしれません。その場合、おそらく到達不能なコードを削除するだけです。

到達できないコードには他の理由があると確信しています。

于 2010-11-13T14:20:25.940 に答える