使い方の規則
使い方の規則で、.NET の適切な使い方をサポートします。
このセクションの内容
ルール | 説明 |
---|---|
CA1801:使用されていないパラメーターの確認 | メソッドのシグネチャに、メソッドの本体で使用されていないパラメーターがあります。 |
CA1816:GC.SuppressFinalize を正しく呼び出します | Dispose を実装するメソッドが GC.SuppressFinalize を呼び出していないか、Dispose を実装しないメソッドが GC.SuppressFinalize を呼び出しています。または、あるメソッドが GC.SuppressFinalize を呼び出し、this (Visual Basic では Me ) 以外のオブジェクトを渡しています。 |
CA2200:スタック詳細を保持するために再度スローします | 例外が再スローされ、その例外が throw ステートメントで明示的に指定されています。 throw ステートメントで例外を指定して例外が再スローされると、例外をスローした元のメソッドと現在のメソッドの間で呼び出されたメソッドの一覧は失われます。 |
CA2201:予約された例外の種類を発生させません | これにより、元のエラーの検出およびデバッグが困難になります。 |
CA2207:値型のスタティック フィールドのインラインを初期化します | 値型で明示的な静的コンストラクターを宣言しています。 この規則違反を修正するには、静的データが宣言されたとき、および静的コンストラクターを削除するときに、静的データをすべて初期化します。 |
CA2208:引数の例外を正しくインスタンス化します | ArgumentException またはそのクラスから派生した例外の種類の既定 (パラメーターなし) のコンストラクターに対して呼び出しが行われたか、ArgumentException またはそのクラスから派生した例外の種類のパラメーター付きのコンストラクターに不適切な文字列型の引数が渡されました。 |
CA2211:非定数フィールドは表示されません | 定数でも読み取り専用でもない静的フィールドは、スレッド セーフではありません。 このようなフィールドへのアクセスは、慎重に制御してください。また、クラス オブジェクトへのアクセスを同期するには、高度なプログラミング技術が必要です。 |
CA2213:破棄可能なフィールドは破棄されなければなりません | System.IDisposable を実装する型が、IDisposable も実装する型を持つフィールドを宣言しています。 このフィールドの Dispose メソッドは、宣言している型の Dispose メソッドから呼び出されていません。 |
CA2214:コンストラクターのオーバーライド可能なメソッドを呼び出しません | コンストラクターから仮想メソッドを呼び出すと、メソッドを呼び出すインスタンスのコンストラクターが実行されないことがあります。 |
CA2215:Dispose メソッドが基底クラスの Dispose を呼び出す必要があります | 破棄可能な型から継承している型では、それ自体の Dispose メソッドから基本データ型の Dispose メソッドを呼び出す必要があります。 |
CA2216:破棄可能な型はファイナライザーを宣言しなければなりません | System.IDisposable を実装し、アンマネージド リソースの使用を提案するフィールドが含まれる型が、Object.Finalize で記述されているようにファイナライザーを実装していません。 |
CA2217: enums を FlagsAttribute に設定しません | 外部から参照できる列挙型が FlagsAttribute でマークされ、その列挙型に、2 の累乗でもなく、その列挙型で定義されている他の値の組み合わせでもない値が 1 つ以上含まれています。 |
CA2218:オーバーライドする Equals で GetHashCode をオーバーライドします | パブリック型で System.Object.Equals をオーバーライドしていますが、System.Object.GetHashCode をオーバーライドしていません。 |
CA2219:exception 句に例外を発生させないでください | finally 句または fault 句で例外が発生すると、アクティブな例外が新しい例外によって隠されます。 filter 句で例外が発生すると、ランタイムがその例外を暗黙的にキャッチします。 これにより、元のエラーの検出およびデバッグが困難になります。 |
CA2224:オーバーロードする演算子 equals で Equals をオーバーライドします | パブリック型で等値演算子が実装されていますが、System.Object.Equals がオーバーライドされていません。 |
CA2225:演算子オーバーロードには名前付けされた代替が存在します | 演算子のオーバーロードが検出され、予想される名前の代替メソッドが検出されませんでした。 名前付きの代替メンバーによって、演算子と同じ機能へアクセスできるようになります。また、演算子のオーバーロードをサポートしていない言語でプログラミングする場合でも、その代替メンバーを使用できます。 |
CA2226: 演算子は対称型オーバーロードを含まなければなりません | 型で等値演算子または非等値演算子を実装し、逆の働きをする演算子を実装していません。 |
CA2227:Collection プロパティは読み取り専用でなければなりません | 書き込み可能なコレクション プロパティにより、ユーザーはコレクションを異なるコレクションで置換できます。 読み取り専用プロパティは、コレクションを置換できないようにしますが、個別のメンバーが設定されることは回避できません。 |
CA2229:シリアル化コンストラクターを実装します | この規則違反を修正するには、シリアル化コンストラクターを実装します。 シールされたクラスの場合、コンストラクターをプライベートにするか、プロテクトにします。 |
CA2231:ValueType.Equals のオーバーライドで、演算子 equals をオーバーロードします | 値型は、Object.Equals をオーバーライドしていますが、等値演算子を実装していません。 |
CA2234:文字列の代わりに System.Uri オブジェクトを渡します | "uri"、"URI"、"urn"、"URN"、"url"、または "URL" という名前を持つ文字列パラメーターが指定されているメソッドに対して、呼び出しが行われました。 そのメソッドの型宣言に対応するメソッドのオーバーロードが存在し、それに対して System.Uri パラメーターが指定されています。 |
CA2235:すべてのシリアル化不可能なフィールドを設定します | シリアル化できない型のインスタンス フィールドが、シリアル化できる型で宣言されています。 |
CA2237:ISerializable 型を SerializableAttribute に設定します | 型が共通言語ランタイムでシリアル化できると認識されるようにするには、型を SerializableAttribute 属性でマークする必要があります。型が ISerializable インターフェイスの実装を通じてカスタムのシリアル化ルーチンを使用している場合でも、マークする必要があります。 |
CA2241:書式設定メソッドに正しい引数を提供 | String.Format に渡される引数 format に、各オブジェクトの引数に対応する書式指定項目が含まれていません (その逆も考えられます)。 |
CA2242:NaN に対して正しくテストします | この式は、Single.Nan または Double.Nan に対して値をテストします。 Single.IsNan(Single) または Double.IsNan(Double) を使用して値をテストします。 |
CA2243:属性文字列リテラルは、正しく解析する必要があります | 属性のリテラル文字列パラメーターが URL、GUID、またはバージョンとして正しく解析されません。 |
CA2244: インデックス付き要素の初期化を重複させません | オブジェクト初期化子に、定数インデックスが同じインデックス付き要素の初期化子が複数あります。 最後の初期化子を除くすべての初期化子は冗長です。 |
CA2245: プロパティをそれ自体に割り当てません | プロパティが誤ってそれ自体に割り当てられました。 |
CA2246: 同じステートメントにシンボルとそのメンバーを割り当てません | 同じステートメントでシンボルとそのメンバー、つまりフィールドまたはプロパティを代入することは推奨されていません。 メンバー アクセスが代入前のシンボルの古い値を使用するのか、このステートメントの代入からの新しい値を使用するのかが明確ではありません。 |
CA2247: TaskCompletionSource コンストラクターに渡される引数は、TaskContinuationOptions 列挙型ではなく、TaskCreationOptions 列挙型にする必要があります | TaskCompletionSource には、基になるタスクを制御する TaskCreationOptions を使用するコンストラクターと、そのタスクに格納されているオブジェクトの状態を使用するコンストラクターがあります。 TaskCreationOptions の代わりに TaskContinuationOptions を誤って渡すと、呼び出しでオプションが状態として処理されます。 |
CA2248: 正しい 'enum' 引数を 'Enum.HasFlag' に指定します | HasFlag メソッドに引数として渡された列挙型が呼び出し元の列挙型と異なります。 |
CA2249:String.IndexOf の代わりに String.Contains を使用することを検討します | 部分文字列が存在するかどうかを確認するために結果を使用する string.IndexOf の呼び出しは、string.Contains で置き換えることができます。 |
CA2250: ThrowIfCancellationRequested を使用します |
ThrowIfCancellationRequested は、トークンが取り消されているかどうかを自動的にチェックし、されている場合は OperationCanceledException をスローします。 |
CA2251: String.Compare の代わりに String.Equals を使用します |
String.Compare の結果を 0 と比較する代わりに、String.Equals を使用したほうがより明確であり、速い可能性があります。 |
CA2252: プレビュー機能をオプトインする | プレビュー API を使用する前に、プレビュー機能をオプトインします。 |
CA2253: 名前付きプレースホルダーを数値にすることはできません | ログ メッセージ テンプレートの名前付きプレースホルダーは、数字のみで構成することはできません。 |
CA2254: テンプレートは静的な式にする必要があります | ログ メッセージ テンプレートは、呼び出しによって異なるべきではありません。 |
CA2255: ModuleInitializer 属性をライブラリ内で使用しないでください |
モジュール初期化子は、アプリケーション コードの実行が開始される前にアプリケーションのコンポーネントが初期化されるようにするために、アプリケーション コードで使用することを想定しています。 |
CA2256: 親インターフェイスで宣言されたすべてのメンバーは、DynamicInterfaceCastableImplementation 属性インターフェイスに実装されている必要があります | DynamicInterfaceCastableImplementationAttribute の属性がある型は、IDynamicInterfaceCastable 型を実装する型のインターフェイス実装として機能します。 結果として、継承されたインターフェイスに定義されているすべてのメンバーの実装を提供する必要があります。IDynamicInterfaceCastable を実装する型からは、他の方法ではそれが提供されないためです。 |
CA2257: 'DynamicInterfaceCastableImplementationAttribute' を持つインターフェイスで定義されたメンバーは 'static' である必要があります | IDynamicInterfaceCastable を実装する型ではメタデータで動的インターフェイスを実装できないことがあるため、この型に定義されている明示的な実装ではないインスタンス インターフェイス メンバーは実行時に呼び出しに失敗する可能性があります。 実行時エラーを回避するには、新しいインターフェイス メンバー static をマークします。 |
CA2258: Visual Basic での 'DynamicInterfaceCastableImplementation' インターフェイスの指定はサポートされていません | 機能的 DynamicInterfaceCastableImplementationAttribute 属性付きインターフェイスを提供するには、Visual Basic でサポートされていない Default Interface Members 機能が必要になります。 |
CA2259: ThreadStatic が静的フィールドでのみ使用されていることを確認してください |
ThreadStaticAttribute は、 static (Visual Basic の場合は Shared ) フィールドにのみ影響します。 インスタンス フィールドに適用した場合、 属性は動作に影響しません。 |
CA2260: 汎用数学インターフェイスを正しく実装する | 汎用的な数式インターフェイスでは、派生型自体を自己反復する種類のパラメーターに使用する必要があります。 |
CA2261: ConfigureAwaitOptions.SuppressThrowing を Task<TResult> と共に使用しない |
この ConfigureAwaitOptions.SuppressThrowing オプションは、無効な TResult を返す可能性があるため、ジェネリック Task<TResult> ではサポートされていません。 |
CA2262: MaxResponseHeadersLength を正しく設定する |
MaxResponseHeadersLength の値が正しく指定されていることを確認します。 この値はキロバイト単位です。 |
CA2264: 'ArgumentNullException.ThrowIfNull' に null 非許容値を渡さないでください | 渡された引数が 'null' の場合、'ArgumentNullException.ThrowIfNull' がスローされます。 null 非許容構造体や 'nameof()' 式や 'new' 式などの特定のコンストラクトは null になることはないため、'ArgumentNullException.ThrowIfNull' はスローされません。 |
CA2265: Span<T> と null または default |
スパンと null または default を比較しても、意図したとおりに動作しない場合があります。 default null リテラルは暗黙的にSpan<T>.Empty に変換されます。 |
CA2263: 型がわかっている場合はジェネリック オーバーロードを優先する | ジェネリック オーバーロードを使用すると、型がわかっている場合に System.Type 引数を渡す方が適しています。これは、コンパイル時のチェックが改善された、よりクリーンでタイプ セーフなコードが促進されるためです。 |
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET