コード検査: 浮動小数点数の等価比較
==/!= 演算子を使用して浮動小数点数を比較することは、一般的には悪い考えです。浮動小数点値は本質的に不正確であり、正確に等しいかどうかを比較することは、ほとんどの場合、望ましいセマンティクスではありません。==/!= 演算子による比較では、浮動小数点値の表現がまったく同じであるかどうかがチェックされます。これは、精度の低下を伴う算術演算を実行する場合はほとんどありません。例: 2 つの簡単な算術演算を実行しましょう —
0.111回を追加0.1に11を乗算する
— そして、それらの浮動小数点の結果が等しいかどうかを確認します。
テスト実行では、add = 1.0999999999999999 と multiply = 1.1000000000000001 を取得します(ランタイムが異なると結果が異なる可能性があります)。== オペレーターは false との比較を評価します。
この種の比較を正しく行うには、許容値、つまり結果が意図した値からどれだけ逸脱できるかを示す値を指定する必要があります。ReSharper は、比較を Math.Abs([expression]) < [tolerance] として自動的に書き換えるのに役立ちます。tolerance 値は、実行する計算の精度に依存します。この例では、0.000000001 の許容誤差に安全に依存できます。
このインスペクションは、ゼロ以外の値が予期される場合に「まだ初期化されていない値」または「値が存在しない」ことを表す 0、+Infinity、-Infinity、NaN など、「マーカー値」としてよく使用される一部の値を無視することに注意してください。
ただし、これを行うためのより良い方法は、null 値を持つ double? タイプです。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
コード検査: 共変種配列変換
C# では、派生型の配列を基本型の配列として参照できます。この Eric Lippert の投稿で説明したように、このデザインには利点と問題点があります。問題について言えば、以下の例を見てみましょう。をに渡すと、まだオブジェクトではなく文字列の配列があります。最初の配列要素に int 値を代入しようとすると、実行時にが取得されます。ReSharper はここで問題を検出し、警告を出します。void Test() { string[] myStrings = {