CA1065: Beklenmedik konumlarda özel durumlar harekete geçirmeyin
TürAdı |
DoNotRaiseExceptionsInUnexpectedLocations |
CheckId |
CA1065 |
Kategori |
Microsoft.Design |
Bozan Değişiklik |
Bozmayan |
Sebep
İstisna atılmasını beklemeyen yöntem bir istisna atar.
Kural Tanımı
İstisna atılmasını beklemeyen yöntemler şu şekilde kategoriere ayrılabilir:
Özellik Alım Yöntemleri
Olay Erişimci Yöntemleri
Eşittir Yöntemleri
KarmaKodAlma Yöntemleri
DiziyeÇevirme Yöntemi
Statik Oluşturucular
Sonlandırıcılar
Metotları Düzenleme
Eşitlik Operatörleri
Kapalı Dönüştürme Operatörleri
Aşağıdaki bölümlerde bu yöntem türleri açıklanmaktadır.
Özellik Alım Yöntemleri
Özellikler, temelde akıllı alanlardır.Bu nedenle, mümkün olduğunca bir alan gibi davranırlar.Alanlar istisna fırlatmazlar ve her ikisininde özellikleri gereklidir.İstisna fırlatan bir özelliğe sahipseniz, onu yöntem yapmayı deneyin.
Aşağıdaki özel durumlara özelliği alma yönteminden fırlatılanlara izin verilir:
InvalidOperationException ve tüm türevleri ( şunlara dahil olmak üzere ObjectDisposedException)
NotSupportedException ve tüm türevleri
ArgumentException (sadece dizinlenmişten alan)
KeyNotFoundException (sadece dizinlenmişten alan)
Olay Erişimci Yöntemleri
Olay erişicisi istisna fırlatmayan basit bir işlem olmalıdır.Bir olay, siz olay işleyicisi eklemeye veya silmeye çalıştığınızda istisna fırlatmamalıdır.
Aşağıdaki özel durumlar olay erişicisi tarafından fırlatılmaya izin verilmiştir:
InvalidOperationException ve tüm türevleri ( şunlara dahil olmak üzere ObjectDisposedException)
NotSupportedException ve tüm türevleri
ArgumentException ve türevleri
Eşittir Yöntemleri
Aşağıdaki Eşittir yöntemleri şu istisnaları fırlatmamalıdır:
Bir Eşittir yöntemi istisna fırlatmak yerine true veya false döndürmelidir.Örneğin, Eşittir iki uyuşmayan tipi geçerse ArgumentException fırlatma yerine bir false döndürmelidir.
KarmaKodAlma Yöntemleri
Aşağıdaki KarmaKodAl yöntemleri genellikle şu istisnaları fırlatmazlar:
KarmaKodAl her zaman bir değer döndürmelidir.Aksi halde, karma tablo içindeki öğeleri kaybedebilirsiniz.
KarmaKodAlma sürümleri, ArgumentExceptionfırlatabilen bir argüman alır.Ancak, Object.GetHashCode asla istisna fırlatmamalı.
DiziyeÇevirme Yöntemi
Hata Ayıklayıcı dize biçiminde nesneler hakkındaki bilgileri görüntülemek amacıyla Object.ToString kullanır.Bu nedenle, DiziyeÇevirme bir nesnenin durumunu değiştirmemeli ve istisna fırlatmamalıdır.
Statik Oluşturucular
Statik oluşturuculardan bir istisna fırlatmak, uygulama alanında kullanılamayan tipe sebep olur.Statik oluşturucu özel durumunu fırlatmak için çok iyi bir neden (örneğin, bir güvenlik sorunu) olması gerekir.
Sonlandırıcılar
Sonlandırıcıdan istisna fırlatımı, işlemciden düşen CLR'nin hızlıca başarısız olmasına neden olur.Bu nedenle, sonlandırıcıda istisna fırlatımından sürekli kaçınılmalıdır.
Metotları Düzenleme
Bir IDisposable.Dispose yöntemi istisna fırlatmamalıdır.Düzenleme, genellikle finally maddesi olarak temizleme mantığının bir parçası diye tabir edilir.Bu nedenle, düzenlemeden açıkca fırlatılan bir istisna, kullanıcıyı finally içinde bir istisna yöneticisi eklemeye zorlar.
Bu Dispose(false) kod yolu asla istisna fırlatmamalıdır, çünkü genellikle neredeyse sonlandırıcıdan çağrılır.
Eşitlik Operatörleri(==, !=)
Eşittir yöntemleri gibi, eşitlik operatörleri true veya false döndürmeli ve istisna fırlatmamalıdır.
Kapalı Dönüştürme Operatörleri
Kullanıcı genellikle kapalı bir dönüştürücü operatörünün çağrıldığından bihaber olduğu için, kapalı bir dönüştürücüden fırlatılan istisna beklenmeyen bir durum olur.Bu nedenle, hiçbir istisna kapalı dönüştürücüler tarafından fırlatılmamalıdır.
İhlallerin Düzeltilmesi
Özellik alıcılar için, ya daha fazla istisna fırlatmayan mantık değiştirilir, ya da yöntemin içindeki özellik değiştirilir.
Yukarıda listelenen tüm diğer yöntem türleri için, artık istisna fırlatmaması gereken mantığı değiştirin.
Uyarılar Ne Zaman Bastırılmalı
İhlal fırlatılmış bir istisnanın içindeki bir istisna düzenlemesinden dolayı oluştuysa bir uyarıyı bu kuraldan bastırmak güvenlidir.
İlgili Kurallar
CA2219: Özel durum yan tümceleri içinde özel durum harekete geçirmeyin