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 | 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:
- System.InvalidOperationException ve tüm türevleri (dahil System.ObjectDisposedException)
- System.NotSupportedException ve tüm türevleri
- System.ArgumentException (yalnızca dizine alınan get'ten)
- System.Collections.Generic.KeyNotFoundException (yalnızca dizine alınan get işleminden)
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:
- System.InvalidOperationException ve tüm türevleri (dahil System.ObjectDisposedException)
- System.NotSupportedException ve tüm türevleri
- System.ArgumentException ve türevleri
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.