CA1710:識別子は、正しいサフィックスを含んでいなければなりません

プロパティ
ルール ID CA1710
Title 識別子は、正しいサフィックスを含んでいなければなりません
[カテゴリ] 名前を付ける
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 いいえ

原因

識別子のサフィックスが正しくありません。

デフォルトでは、この規則の対象は外部から参照可能な識別子のみですが、これは構成可能です。

規則の説明

名前付け規則によると、特定の基本型を拡張した型、特定のインターフェイスを実装する型、またはそのような型から派生される型は、基本型やインターフェイスに関連するサフィックスを名前に付けます。

名前付け規則では、共通言語ランタイムをターゲットとするライブラリの統一的な名前の付け方が規定されています。 これにより、新しいソフトウェア ライブラリを習得するまでの時間を短縮でき、マネージド コード開発の専門家によってライブラリが開発されたという信頼を顧客に与えることができます。

次の表に、サフィックスが関連付けられている基本型とインターフェイスの一覧を示します。

基本型/インターフェイス サフィックス
System.Attribute 属性
System.EventArgs EventArgs
System.Exception 例外
System.Collections.ICollection コレクション
System.Collections.IDictionary Dictionary
System.Collections.IEnumerable コレクション
System.Collections.Generic.IReadOnlyDictionary<TKey,TValue> Dictionary
System.Collections.Queue Collection または Queue
System.Collections.Stack Collection または Stack
System.Collections.Generic.ICollection<T> コレクション
System.Collections.Generic.IDictionary<TKey,TValue> Dictionary
System.Data.DataSet DataSet
System.Data.DataTable Collection または DataTable
System.IO.Stream ストリーム
System.Security.IPermission 権限
System.Security.Policy.IMembershipCondition 条件
イベント ハンドラーのデリゲート EventHandler

ICollection を実装する型およびディクショナリ、スタック、キューなどの一般化された型のデータ構造体である型は、その型の使用目的に関する意味のある情報を提供する名前を使用できます。

ICollection を実装する型および特定の項目のコレクションの型には、'Collection' という語で終わる名前が付きます。 たとえば、Queue オブジェクトのコレクションには 'QueueCollection' という名前を付けます。 'Collection' サフィックスは、foreach (Visual Basic では For Each) ステートメントを使用してコレクションのメンバーを列挙できることを示します。

IDictionary または IReadOnlyDictionary<TKey,TValue> を実装している型には、IEnumerable または ICollection を実装している場合でも、'Dictionary' という語で終わる名前が付きます。 'Collection' および 'Dictionary' サフィックスの名前付け規則を使用すると、ユーザーは次の 2 つの列挙パターンを区別できます。

'Collection' サフィックスを持つ型は、この列挙パターンに従います。

foreach(SomeType x in SomeCollection) { }

'Dictionary' サフィックスを持つ型は、この列挙パターンに従います。

foreach(SomeType x in SomeDictionary.Values) { }

DataSet オブジェクトは、System.Data.DataColumn および System.Data.DataRow オブジェクトなどのコレクションで構成される DataTable オブジェクトのコレクションで構成されます。 これらのコレクションでは、基本の System.Data.InternalDataCollectionBase クラスによって ICollection が実装されます。

違反の修正方法

型の名前を変更して、サフィックスとして正しい語句が付くようにします。

どのようなときに警告を抑制するか

型が拡張される可能性がある一般化されたデータ構造であるか、または任意の多様な項目のセットを保持する場合は、'Collection' サフィックスを使用するように警告を抑制するのが安全です。 この場合、データ構造の実装、パフォーマンス、またはその他の特性に関する意味のある情報を提供する名前が妥当です (BinaryTree など)。 型が特定の型 (たとえば、StringCollection) のコレクションを表す場合、この規則からの警告を抑制しないでください。これは、サフィックスが foreach ステートメントを使用して型を列挙できることを示しているためです。

他のサフィックスについては、このルールからの警告を抑制しないでください。 サフィックスによって、型名から意図された使用法を明確にすることができます。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1710
// The code that's violating the rule is on this line.
#pragma warning restore CA1710

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1710.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

分析するコードを構成する

次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するかを構成します。

これらのオプションを構成できる対象は、この規則だけ、それを適用するすべての規則、それを適用するこのカテゴリ (名前付け) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。

特定の API サーフェイスを含める

ユーザー補助に基づいて、この規則を実行するコードベースの部分を構成できます。 たとえば、非パブリック API サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。

dotnet_code_quality.CAXXXX.api_surface = private, internal

間接基本型を除外する

間接基本型をルールから除外するかどうかを構成できます。 デフォルトでは、このオプションは true に設定されています。これにより、分析が現在の基本データ型に制限されます。

dotnet_code_quality.CA1710.exclude_indirect_base_types = false

追加の必要なサフィックス

プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加することで、追加の必要なサフィックスを指定したり、ハードコーディングされたサフィックスの動作をオーバーライドしたりすることができます。

dotnet_code_quality.CA1710.additional_required_suffixes = [type]->[suffix]

複数の値は | 文字で区切ります。 型は、次のいずれかの形式で指定できます。

  • 型の名前のみ (包含する型または名前空間に関係なく、その名前が指定されたすべての型が含まれます)。
  • そのシンボルのドキュメント ID 形式の完全修飾名 (オプションで T: プレフィックスも使用可)。

次に例を示します。

オプション値 まとめ
dotnet_code_quality.CA1710.additional_required_suffixes = MyClass->Class 'MyClass' から継承されるすべての型は、'Class' サフィックスを持つ必要があります。
dotnet_code_quality.CA1710.additional_required_suffixes = MyClass->Class|MyNamespace.IPath->Path 'MyClass' から継承されるすべての型は、'Class' サフィックスを持つ必要があります。また、'MyNamespace.IPath' を実装するすべての型には 'Path' サフィックスが必要です。
dotnet_code_quality.CA1710.additional_required_suffixes = T:System.Data.IDataReader->{} 組み込みのサフィックスをオーバーライドします。 この場合、'IDataReader' を実装するすべての型は、'Collection' で終了する必要がなくなりました。

CA1711:識別子は、不適切なサフィックスを含むことはできません

関連項目