CA1065: Beklenmedik konumlarda özel durumlar harekete geçirmeyin
TürAdı |
DoNotRaiseExceptionsInUnexpectedLocations |
CheckId |
CA1065 |
Kategori |
Microsoft.Design |
Bozan Değişiklik |
Bozmayan |
İstisna atılmasını beklemeyen yöntem bir istisna atar.
İ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.
Ö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ş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
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.
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ı.
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ş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ı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.
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şittir yöntemleri gibi, eşitlik operatörleri true veya false döndürmeli ve istisna fırlatmamalıdır.
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.
Ö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.
İ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.
CA2219: Özel durum yan tümceleri içinde özel durum harekete geçirmeyin