Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1857 |
| Başlık | parametresi en iyi performans için bir sabit bekler |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Uyarı olarak |
| Geçerli diller | C# |
Neden
ile ConstantExpectedAttributeaçıklama ekleyen bir parametreye geçersiz bir bağımsız değişken geçirilir.
Kural açıklaması
Bu kural, kodunuzda aşağıdaki konumları işaretler:
- Devralınan bir yöntemi uygulayın; bu yöntemde ConstantExpectedAttribute özniteliğini kullanın ancak parametrenizi ConstantExpectedAttribute ile işaretlemeyin.
- Sabit olmayan bir bağımsız değişkeni, ConstantExpectedAttribute özniteliğine sahip bir parametreye geçirin.
- ConstantExpectedAttribute özniteliğine sahip bir parametreye geçersiz sabit bir bağımsız değişken geçirin.
- ConstantExpectedAttribute özniteliğine sahip bir parametreye sabit bir bağımsız değişken geçirin ve bu bağımsız değişken Min veya Max değerlerinin aralığının dışındaysa.
İhlalleri düzeltme
Kodunuzu, aldığınız hata iletisiyle belirtilen şekilde düzeltin.
Örnek 1 (öznitelik bekleniyor)
Aşağıdaki kod parçacığı CA1857 ihlalini gösterir:
public interface I1<T>
{
T M1(T operand1, [ConstantExpected] T operand2);
}
public class C1 : I1<int>
{
public int M1(int operand1, int operand2) =>
throw new NotImplementedException();
}
Aşağıdaki kod parçacığı ihlali düzeltir:
public interface I1<T>
{
T M1(T operand1, [ConstantExpected] T operand2);
}
public class C1 : I1<int>
{
public int M1(int operand1, [ConstantExpected] int operand2) =>
throw new NotImplementedException();
}
Örnek 2 (sabit ve sabit olmayan)
Aşağıdaki kod parçacığı CA1857 ihlalini gösterir:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Aşağıdaki kod parçacığı ihlali düzeltir:
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Örnek 3 (geçersiz sabit)
Aşağıdaki kod parçacığı CA1857 ihlalini gösterir:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
Aşağıdaki kod parçacığı ihlali düzeltir:
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Örnek 4 (sabit değer sınır dışında)
Aşağıdaki kod parçacığı CA1857 ihlalini gösterir:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Aşağıdaki kod parçacığı ihlali düzeltir:
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Uyarıların ne zaman bastırılması gerekiyor?
Performans önemli değilse, bu kuraldan gelen bir uyarıyı engellemek güvenlidir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.