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 9'da 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:
- 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' den)
- System.Collections.Generic.KeyNotFoundException (yalnızca dizine alınan get' den)
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:
- System.InvalidOperationException ve tüm türevleri (dahil System.ObjectDisposedException)
- System.NotSupportedException ve tüm türevleri
- System.ArgumentException ve türevleri
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 true
false
gerekir. Örneğin, iki eşleşmeyen tür geçirilirseEquals
, bir false
atmak yerine yalnızca döndürülmelidirArgumentException.
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 false
dö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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1065.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.