次の方法で共有


CA1069: 列挙型には重複する値を指定できません

プロパティ
ルール ID CA1069
Title 列挙型には重複する値を指定できません
[カテゴリ] デザイン
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 提案として

原因

列挙型に、同じ定数値が明示的に割り当てられている複数のメンバーがあります。

規則の説明

すべての列挙型メンバーには、一意の定数値を設定するか、値を共有する明示的な意図を示すために、列挙型の前のメンバーに明示的に割り当てる必要があります。 次に例を示します。

enum E
{
   Field1 = 1,
   AnotherNameForField1 = Field1,   // This is fine
   Field2 = 2,
   Field3 = 2,   // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}

この規則は、以下のようなシナリオで発生する機能的なバグを見つけるために役立ちます。

  • 誤入力 (ユーザーが誤って複数のメンバーに同じ定数値を入力した場合)。
  • コピーと貼り付けのミス (既存のメンバー定義をコピーした後、メンバーの名前を変更したが、値を変更するのを忘れた場合)。
  • 複数のブランチからの解決のマージ (異なるブランチで、名前は異なるが値が同じ新しいメンバーが追加された場合)。

違反の修正方法

違反を修正するには、新しい一意の定数値を割り当てるか、列挙型の前のメンバーに割り当てて、同じ値を共有する明示的な意図を示します。 たとえば、次のコード スニペットで、規則の違反と違反のいくつかの修正方法を示しています。

enum E
{
   Field1 = 1,
   AnotherNameForField1 = Field1,   // This is fine
   Field2 = 2,
   Field3 = 2,   // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
enum E
{
   Field1 = 1,
   AnotherNameForField1 = Field1,   // This is fine
   Field2 = 2,
   Field3 = 3,   // This is now fine
}
enum E
{
   Field1 = 1,
   AnotherNameForField1 = Field1,   // This is fine
   Field2 = 2,
   Field3 = Field2,   // This is also fine
}

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

この規則の違反は抑制しないでください。

関連項目