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 9'da 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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA2245.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
İlgili kurallar
- CS1717: Aynı değişkene yapılan atama; Başka bir şey atamak mı istedin?
- CA2011: Ayarlayıcı içinde özellik atama
- CA2246: Aynı deyimde bir simge ve üyesi atama