信頼性の規則

信頼性の規則は、メモリやスレッドの適切な使用など、ライブラリとアプリケーションの信頼性をサポートします。 次のような信頼性の規則があります。

ルール 説明
CA2000:スコープを失う前にオブジェクトを破棄 例外的なイベントが発生するとオブジェクトのファイナライザーを実行できないため、オブジェクトに対するすべての参照がスコープ外になる前に、オブジェクトを明示的に破棄する必要があります。
CA2002:弱い ID を伴うオブジェクト上でロックしません アプリケーション ドメインの境界を越えてオブジェクトに直接アクセスできる場合、そのオブジェクトの ID は不十分と表現されます。 スレッドで ID が不十分なオブジェクトをロックしようとすると、ブロックされることがあります。たとえば、異なるアプリケーション ドメインの別スレッドで、既に同じオブジェクトがロックされている場合です。
CA2007:タスクを直接待機しないでください 非同期メソッドでは Task を直接待機します。
CA2008:TaskScheduler を渡さずにタスクを作成しない タスクの作成または継続の操作で、TaskScheduler パラメーターを指定しないメソッド オーバーロードを使用しています。
CA2009: ImmutableCollection 値で ToImmutableCollection を呼び出さないでください ToImmutable メソッドが System.Collections.Immutable 名前空間から変更できないコレクションで不必要に呼び出されました。
CA2011: セッター内でプロパティを割り当てません プロパティの set アクセサー内でプロパティに値が誤って割り当てられました。
CA2012: ValueTask を正しく使用する必要があります メンバーの呼び出しから返される ValueTask は、直接待機される必要があります。 ValueTask を複数回使用しようとするか、完了が判明する前に結果に直接アクセスしようとすると、例外または破損が発生する可能性があります。 このような ValueTask を無視することは、機能的なバグを示していることが多く、パフォーマンスを低下させる可能性があります。
CA2013: 値の型と共に ReferenceEquals を使用しないでください System.Object.ReferenceEquals を使用して値を比較するときに、objA と objB が値の型である場合、この 2 つは ReferenceEquals メソッドに渡される前にボックス化されます。 つまり、objA と objB が同じ値の型のインスタンスを表している場合でも、ReferenceEquals メソッドからは false が返されます。
CA2014: ループ内で stackalloc を使用しません stackalloc によって割り当てられたスタック領域は、現在のメソッド呼び出しの終了時にのみ解放されます。 これをループ内で使用すると、スタックが無限に増加し、最終的にスタック オーバーフロー状態が発生する可能性があります。
CA2015: MemoryManager から派生した型にはファイナライザーを定義しません<T> MemoryManager<T> から派生した型にファイナライザーを追加すると、Span<T> によってまだ使用中のメモリが解放される可能性があります。
CA2016:CancellationToken パラメーターを 1 つのメソッドに転送する CancellationToken パラメーターを 1 つを取るメソッドに転送して操作のキャンセル通知が適切に伝達されるようにするか、または CancellationToken.None を明示的に渡して意図的にトークンを伝達しないことを指定します。
CA2017: パラメーター カウントが一致しません ログ メッセージ テンプレートで指定されたパラメーターの数が、名前付きプレースホルダーの数と一致しません。
CA2018: Buffer.BlockCopy に対する count の引数で、コピーするバイト数を指定する必要がある Buffer.BlockCopy を使用するとき、count 引数では、コピーするバイト数を指定します。 Array.Length は、その要素のサイズが正確に 1 バイトの配列上の count 要素にのみ使用します。 bytesbyte、および bool には、サイズが 1 バイトの要素があります。
CA2019: ThreadStatic フィールドでインライン初期化を使用しないでください ThreadStaticAttribute で注釈が付けられたフィールドはインラインで初期化される、または明示的に static (Visual Basic では Shared) コンストラクターで初期化されます。
CA2020: IntPtr/UIntPtr の組み込み演算子によって発生する動作変更を防止する .NET 7 で追加されたいくつかの組み込み演算子の動作が、.NET 6 以前のバージョンのユーザー定義演算子とは異なります。 オーバーフロー中に unchecked コンテキストでスローしていた一部の演算子が、checked コンテキスト内でラップされない限り、スローしなくなります。 以前は checked コンテキストでスローしなかった一部の演算子が、unchecked コンテキスト内でラップされない限りスローするようになります。
CA2021: 互換性のない型を指定して Enumerable.Cast<T> または Enumerable.OfType<T> を呼び出さない Enumerable.Cast<TResult>(IEnumerable) または Enumerable.OfType<TResult>(IEnumerable) の呼び出しで、入力コレクションの型と互換性のない型パラメーターが指定されています。