Aracılığıyla paylaş


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 9'da 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:

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