CA1857: parametresi en iyi performans için bir sabit bekler
Özellik | Değer |
---|---|
Kural Kimliği | CA1857 |
Başlık | parametresi en iyi performans için bir sabit bekler |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | Uyarı olarak |
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:
- özniteliğini kullanan ancak parametresini ile ConstantExpectedAttributeişaretlemeyen devralınan ConstantExpectedAttribute bir yöntem uygulayın.
- Özniteliğine sahip ConstantExpectedAttribute bir parametreye sabit olmayan bir bağımsız değişken geçirin.
- Özniteliğine sahip ConstantExpectedAttribute bir parametreye geçersiz bir sabit bağımsız değişken geçirin.
- Özniteliği olan ConstantExpectedAttribute bir parametreye sabit bir bağımsız değişken geçirin ve bağımsız değişken veya Max değerlerinin aralığının Min dışında.
İ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 değil sabit)
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 sınır dışı)
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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.