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 | CA2245 |
| Başlık | Bir özelliği kendisine atama |
| Kategori | Kullanım |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
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ı istisnai uç durumlarda, özellik değerini getirmenin yan etkileri olabilir ve özelliğin yeni değeri orijinal değerinden farklı olabilir. 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. Özelliğin kendi kendine atanması ihlalini düzeltmeye yardımcı olmak için bu işlevsel hataları bildirir. Özelliğin kendi kendine atanmasının istendiği küçük bir uç durumlar kümesi için, CA2245 ihlaller uygun bir gerekçesi belirtilerek kaynağı bastırılabilir.
İ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?
Bir özelliğin değerini getirmenin yan etkileri olabilir ve özelliğin yeni değeri orijinal değerinden farklıysa, bu kuraldaki ihlalleri bastırmak güvenlidir. Bu durumda, özellik kendi kendine ataması yedekli değildir. Beklenen davranış olarak belgelendirmek amacıyla bastırmaya 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.
İlgili kurallar
- CS1717: Aynı değişkene yapılan atama; Başka bir şey atamak mı istedin?
- CA2011: Ayarlayıcı içinde özellik ataması yapmayın
- CA2246: Bir simge ve üyesini aynı deyimde atamayın