コード検査: 条件呼び出し内での意図しない変更の可能性
このインスペクションは、条件文 (例: Debug.Assert()) 内のメソッド呼び出しによって、意図しない副作用が発生したり、コードの明確さが低下したりする可能性があるケースを検出します。
メソッドがオブジェクトの状態を変更し、その戻り値が条件文内で使用される場合、ロジックが読みにくくなる可能性があります。これにより保守性が低下し、意図しないエラーが発生する可能性が高まります。
次の例を考えてみましょう。
この例
HashSet.Addメソッドは値の追加を試みることでコレクションを変更し、その戻り値 (bool) は操作が成功したかどうかを示します。この戻り値を
Debug.Assert呼び出しで直接使用すると、HashSet.Addの詳細を理解しなければアサーションの意図が不明瞭になるため、読者を混乱させる可能性があります。条件文内でコレクションを変更することは、意図しない副作用が発生したり、意図したロジックが誤って解釈されたりする可能性があるため、通常は非標準的な方法です。
このインスペクションに対処し、コードの明確さを向上させるには、次のアプローチを検討してください。
わかりやすくするためにリファクタリングする : メソッド呼び出しの結果を適切に名前の付いた変数に抽出し、その目的を明示的にします。
bool wasAdded = set.Add(1); Debug.Assert(wasAdded);意図と必要性を確認する : コレクションのアサーションまたは変更が不要または誤解を招く場合は、コードを簡素化するためにリファクタリングまたは削除することを検討してください。
これらの推奨事項に従うことで、コードの読みやすさが向上し、曖昧さが軽減され、条件文の意図がコードを保守するすべてのユーザーに明確になります。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
コード検査: 「CancellationToken」の誤った使用の可能性があります
このインスペクションは、メソッドまたは関数が引数として渡されたものの代わりに外部コンテキストからのを使用するシナリオを検出します。誤った使用箇所:public void Bar(CancellationToken methodToken) { LocalFunction(methodToken); // do something void LocalFunction(CancellationToken localFuncToken) { Foo(methodToken); // Incorrec...