コード検査: 書式文字列の書式指定子の後に右中括弧を使用しないでください
このインスペクションは、複合文字列または補間文字列内の書式指定子が意図せず閉じ括弧(})を捕捉するケースを指摘します。これにより、実行時エラーや不正なフォーマット動作が発生する可能性があります。
例: 次のコードの場合:
ここで、2 番目の閉じ括弧(}})は、フォーマットロジックによって、ネストされた書式項目の一部であると誤って解釈されます。これにより、実行時エラーが発生したり、意図しないフォーマット結果になったりします。
.NET フレームワークでは、Console.WriteLine($"Value: {42:x}}}"); などの文字列補間は内部的に string.Format の呼び出しに変換されます。そのため、文字列補間を使用する場合にもこの問題が発生します。
複合フォーマットの詳細については、公式の Microsoft ドキュメントを参照してください。
.NET 5 以降、この問題はコンパイラーによって処理されます。書式指定子は曖昧さを軽減する方法で処理されるようになり、閉じ括弧を追加してもエラーが発生しなくなりました。これにより、ほとんどの場合、手動で調整する必要がなくなりました。
.NET フレームワークまたは .NET バージョン 5.0 より前を対象とする古いプロジェクトの場合、式を手動で ToString と文字列連結の組み合わせに変更するのが、明瞭性と互換性を確保しながらこの問題を解決する最も簡単な方法です。
この場合、修正されたバージョンは次のようになります。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
コード検査: 'Stream.Read()' によって読み取られた実際のバイト数は無視されます
このインスペクションは、実際に読み取られたバイト数を表すの戻り値が無視されるケースを識別します。これにより、部分的に読み取られたデータの処理が不適切になる可能性があります。public void Test(Stream stream) { Span<byte> buffer = stackalloc byte[16]; stream.Read(buffer); }public void Test(Stream stream) { Span<byte> buffer = s...