CA1065: Beklenmedik konumlarda özel durumlar harekete geçirmeyin

Özellik Değer
Kural Kimliği CA1065
Başlık Beklenmeyen konumlarda özel durum harekete geçirmeyin
Kategori Tasarım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

İstisna atılmasını beklemeyen yöntem bir istisna atar.

Kural açıklaması

Özel durum oluşturması beklenmeyen yöntemler aşağıdaki gibi kategorilere ayırılabilir:

  • Özellik alma yöntemleri
  • Olay erişimci yöntemleri
  • Eşittir yöntemleri
  • GetHashCode yöntemleri
  • ToString yöntemleri
  • Statik oluşturucular
  • Sonlandırıcılar
  • Dispose yöntemleri
  • Eşitlik İşleçleri
  • Örtük atama işleçleri

Aşağıdaki bölümlerde bu yöntem türleri açıklanmıştır.

Özellik alma yöntemleri

Özellikler temelde akıllı alanlardır. Bu nedenle, mümkün olduğunca alan gibi davranmaları gerekir. Alanlar özel durum oluşturmaz ve özellikleri oluşturmamalıdır. Özel durum oluşturan bir özelliğiniz varsa, bunu bir yöntem yapmayı göz önünde bulundurun.

Bir özellik get yönteminden aşağıdaki özel durumlar oluşturulabilir:

Olay erişimci yöntemleri

Olay erişimcileri özel durum oluşturmaz basit işlemler olmalıdır. Olay işleyicisi eklemeye veya kaldırmaya çalıştığınızda bir olay özel durum oluşturmamalıdır.

Bir olay erişimcisinden aşağıdaki özel durumlar oluşturulabilir:

Eşittir yöntemleri

Aşağıdaki Equals yöntemleri özel durumlar oluşturmamalıdır:

Bir Equals yöntemin özel durum oluşturması yerine veya döndürmesi truefalse gerekir. Örneğin, iki eşleşmeyen tür geçirilirseEquals, bir ArgumentExceptionatmak yerine yalnızca döndürülmelidirfalse.

GetHashCode yöntemleri

Aşağıdaki GetHashCode yöntemler genellikle özel durumlar oluşturmamalıdır:

GetHashCode her zaman bir değer döndürmelidir. Aksi takdirde, karma tablosundaki öğeleri kaybedebilirsiniz.

Bağımsız değişken alan sürümleri GetHashCode bir ArgumentExceptionoluşturabilir. Ancak hiçbir Object.GetHashCode zaman özel durum oluşturmamalıdır.

ToString yöntemleri

Hata ayıklayıcı, nesneler hakkındaki bilgilerin dize biçiminde görüntülenmesine yardımcı olmak için kullanır System.Object.ToString . Bu nedenle, ToString bir nesnenin durumunu değiştirmemeli ve özel durumlar oluşturmamalıdır.

Statik oluşturucular

Statik bir oluşturucudan özel durumlar oluşturmak, türün geçerli uygulama etki alanında kullanılamaz olmasına neden olur. Statik bir oluşturucudan özel durum oluşturmak için iyi bir nedeniniz (güvenlik sorunu gibi) olmalıdır.

Sonlandırıcılar

Sonlandırıcıdan bir özel durum oluşturmak CLR'nin hızlı bir şekilde başarısız olmasına neden olur ve bu da işlemi yerle bir eder. Bu nedenle, sonlandırıcıda özel durumlar oluşturmaktan kaçının.

Dispose yöntemleri

Bir System.IDisposable.Dispose yöntem özel durum oluşturmamalıdır. Dispose genellikle bir yan tümcedeki temizleme mantığının bir finally parçası olarak çağrılır. Bu nedenle, açıkça bir Dispose özel durum oluşturma, kullanıcıyı yan tümcesine özel durum işleme eklemeye finally zorlar.

Neredeyse Dispose(false) her zaman sonlandırıcıdan çağrıldığından Dispose kod yolu hiçbir zaman özel durumlar oluşturmamalıdır.

Eşitlik işleçleri (==, !=)

Yöntemler gibi Equals eşitlik işleçleri de true veya falsedöndürmelidir ve özel durumlar oluşturmamalıdır.

Örtük atama işleçleri

Kullanıcı genellikle örtük bir atama işlecinin çağrıldığının farkında olmadığından, örtük atama işleci tarafından oluşan bir özel durum beklenmeyen bir durumdur. Bu nedenle, örtük atama işleçlerinden hiçbir özel durum oluşturulmalıdır.

İhlalleri düzeltme

Özellik alıcıları için, artık bir özel durum oluşturmak zorunda kalmaması için mantığı değiştirin veya özelliğini bir yöntem olarak değiştirin.

Daha önce listelenen diğer tüm yöntem türleri için artık özel durum oluşturmaması için mantığı değiştirin.

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

İhlal, bir özel durum yerine bir özel durum bildiriminden kaynaklandıysa, bu kuraldan bir uyarıyı bastırmak 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 CA1065
// The code that's violating the rule is on this line.
#pragma warning restore CA1065

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

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

Ayrıca bkz.