CA2245: Kendisine özellik atama

Özellik Değer
Kural Kimliği CA2245
Başlık Bir özelliği kendisine atama
Kategori Kullanım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Bir özellik kendisine yanlışlıkla atandı.

Kural açıklaması

C# derleyicisi bir uyarı CS1717 oluşturur: Atama aynı değişkene yapılır; kendisine bir alan, yerel veya parametre simgesi atandığında başka bir şey atamak mı istiyorsunuz? Yerel, parametre veya alan simgesinin kapsamdaki başka bir simgeye benzer bir adı olduğunda bu tür bir hata yaygındır. Atamanın sol tarafında ve sağ tarafında farklı simgeler kullanmak yerine, her iki tarafta da aynı simge kullanılmıştır. Bu, değerin kendisine yedekli atanmasına yol açar ve genellikle işlevsel bir hatayı gösterir.

Bir özelliği kendisine atamak, neredeyse tüm gerçek dünya vakaları için benzer işlevsel bir hatadır. Ancak bazı aşırı köşe durumlarında, bir özellik değerini getirmenin yan etkileri olabilir ve özelliğin yeni değeri özgün değerden farklıdır. Bu durumda, özellik kendi kendine ataması yedekli değildir ve kaldırılamaz. Bu, derleyicinin bu durumlar için hataya neden olan bir CS1717 değişiklik yapmadan özellik kendi kendine ataması için bir uyarı oluşturmasını engeller.

Kural CA2245 bu boşluğu doldurmayı amaçlar. Bu işlevsel hataları düzeltmeye yardımcı olmak için özellik kendi kendine atama ihlalini bildirir. Özellik kendi kendine atamanın istendiği küçük köşe durumları kümesi için, CA2245 ihlaller uygun bir gerekçe açıklamasıyla kaynakta gizlenebilir.

İhlalleri düzeltme

İhlalleri düzeltmek için ödevin sol tarafında ve sağ tarafında farklı simgeler kullanın. Örneğin, aşağıdaki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:

public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // CS1717: Accidentally assigned the parameter 'p' to itself.
        p = p;

        // CA2245: Accidentally assigned the property 'P' to itself.
        P = P;
    }
}
public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // No violation, now the parameter is assigned to the field.
        this.p = p;

        // No violation, now the parameter is assigned to the property.
        P = p;
    }
}

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

Özellik değerini getirmenin yan etkileri olabilir ve özelliğin yeni değeri özgün değerden farklıysa, bu kuraldaki ihlalleri bastırmak güvenlidir. Bu durumda, özellik kendi kendine ataması yedekli değildir. Bunu beklenen davranış olarak belgeleme amacıyla gizlemeye bir gerekçe açıklaması eklenmelidir.

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 CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245

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.CA2245.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.