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.