CA1065: Beklenmedik konumlarda istisnaları tetiklemeyin

Özellik Değer
Kural Kimliği CA1065
Başlık Beklenmeyen konumlarda istisna oluşturmayın
Kategori Tasarım
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

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şim yöntemleri
  • Eşitlik Yöntemleri
  • GetHashCode yöntemleri
  • ToString yöntemleri
  • Statik oluşturucular
  • Sonlandırıcılar
  • Atma Yöntemleri
  • Eşitlik İşleçleri
  • Örtük tip dönüştürme operatörleri

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

Özellik okuma yöntemleri

Özellikler temelde akıllı alanlardır. Mümkün olduğunca bir 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, istisnalara neden olmayan 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şitlik yöntemleri

Aşağıdaki Equals yöntemleri istisna fırlatmamalıdır.

Bir Equals yöntemi, bir hata durumu oluşturmaktansa true veya false döndürmelidir. Equals iki eşleşmeyen tür geçirilirse, bir ArgumentException atmak yerine yalnızca false döndürülmelidir.

GetHashCode yöntemleri

Aşağıdaki GetHashCode yöntemler genellikle istisna 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 ArgumentException atabilir. Ancak Object.GetHashCode asla istisna fırlatmamalı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 bir özel durum fırlatmak 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.

Atma Yöntemleri

Bir System.IDisposable.Dispose yöntem özel durum oluşturmamalıdır. Dispose genellikle bir finally birimindeki temizlik mantığının bir parçası olarak çağrılır. Bu nedenle, Dispose'den açıkça bir özel durum fırlatılması, kullanıcıyı finally yan tümcesine özel durum işleme eklemeye 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 tip dönüştürme operatörleri

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 dönüşüm operatörlerinden istisna atılmamalıdır.

İhlalleri düzeltme

Özellik alıcıları için, mantığı artık bir özel durum oluşturmaya gereksinim duymayacak şekilde değiştirebilir veya özelliği bir metoda dönüştürebilirsiniz.

Daha önce listelenen diğer tüm yöntem türleri için artık bir istisna fırlatmasına gerek kalmaması için mantığı değiştirin.

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

İhlal, bir istisna yerine bir istisna bildirimiyle oluştuysa, 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.