CA1069: Sabit listeleri yinelenen değerlere sahip olmamalıdır

Özellik Değer
Kural Kimliği CA1069
Başlık Sabit listeleri yinelenen değerlere sahip olmamalıdır
Kategori Tasarım
Hataya neden olan veya bozulmayan düzeltme Yeni
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Sabit listesi , açıkça aynı sabit değere atanmış birden çok üyeye sahiptir.

Kural açıklaması

Her sabit üye benzersiz bir sabit değere sahip olmalı veya değeri paylaşmanın açık amacını belirtmek için sabitteki önceki bir üyeyle açıkça atanmalıdır. Örneğin:

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.
}

Bu kural, aşağıdaki senaryolardan gelen işlevsel hataları yakalamaya yardımcı olur:

  • Kullanıcının birden çok üye için yanlışlıkla aynı sabit değeri yazdığı yanlışlıkla yazma hataları.
  • Kullanıcının var olan bir üye tanımını kopyaladığı, ardından üyeyi yeniden adlandırdığı ancak değeri değiştirmeyi unuttuğu kopyalama yapıştırma hataları.
  • Birden çok daldan, farklı bir adla ancak farklı dallarda aynı değerle yeni bir üyenin eklendiği birleştirme çözümlemesi.

İhlalleri düzeltme

Bir ihlali düzeltmek için yeni bir benzersiz sabit değer atayın veya aynı değeri paylaşmanın açık amacını belirtmek için sabit listesinde önceki bir üyeyle atayın. Örneğin, aşağıdaki kod parçacığı kuralın ihlalini ve ihlali düzeltmenin birkaç yolunu gösterir:

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
}

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuralın ihlallerini bastırmayın.

Ayrıca bkz.