Ekinlikler
17 Mar 21 - 21 Mar 10
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Özellik | Değer |
---|---|
Kural Kimliği | CA1031 |
Başlık | Genel özel durum türlerini yakalamayın |
Kategori | Tasarım |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
veya gibi System.ExceptionSystem.SystemException genel bir özel durum bir catch
deyimine yakalanmış veya gibi catch()
genel bir catch yan tümcesi kullanılır.
Varsayılan olarak, bu kural yalnızca yakalanan genel özel durum türlerini işaretler, ancak bu yapılandırılabilir.
Genel özel durum yakalanmamalı.
Bu kuralın ihlalini düzeltmek için daha belirli bir özel durum yakalayın veya bloktaki catch
son deyim olarak genel özel durumu yeniden oluşturun.
Bu kuraldan uyarıyı bastırmayın. Genel özel durum türlerini yakalamak, çalışma zamanı sorunlarını kitaplık kullanıcısından gizleyebilir ve hata ayıklamayı zorlaştırabilir.
Not
.NET Framework 4'den başlayarak, ortak dil çalışma zamanı (CLR), yönetilen kod tarafından işlenmek üzere windows'taki erişim ihlalleri gibi işletim sisteminde ve yönetilen kodda oluşan bozuk durum özel durumları sunmaz. .NET Framework 4 veya sonraki sürümlerinde bir uygulama derlemek ve bozuk durum özel durumlarının işlenmesini sürdürmek istiyorsanız, özniteliğini bozuk durum özel durumunu işleyen yönteme uygulayabilirsiniz HandleProcessCorruptedStateExceptionsAttribute .
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Tasarım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Hangi özel durum türlerinin yakalanmaya izin verilmeyenlerini yapılandırabilirsiniz. Örneğin, kuralın işleyicilere ile bayrak catch
eklemesi gerektiğini belirtmek için projenizdeki bir NullReferenceException
dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CA1031.disallowed_symbol_names = NullReferenceException
Seçenek değerinde izin verilen tür adı biçimleri (ile |
ayrılmış):
T:
ön ek içeren tam adlar.Örnekler:
Seçenek değeri | Özet |
---|---|
dotnet_code_quality.CA1031.disallowed_symbol_names = ExceptionType |
Derlemedeki 'ExceptionType' adlı tüm sembolleri eşleştirir. |
dotnet_code_quality.CA1031.disallowed_symbol_names = ExceptionType1|ExceptionType2 |
Derlemedeki 'ExceptionType1' veya 'ExceptionType2' adlı tüm sembolleri eşleştirir. |
dotnet_code_quality.CA1031.disallowed_symbol_names = T:NS.ExceptionType |
Verilen tam adla 'ExceptionType' adlı belirli türleri eşleştirir. |
dotnet_code_quality.CA1031.disallowed_symbol_names = T:NS1.ExceptionType1|T:NS1.ExceptionType2 |
'ExceptionType1' ve 'ExceptionType2' adlı türleri ilgili tam adlarla eşleştirir. |
Bu seçenekleri yalnızca bu kural için, uyguladıkları tüm kurallar için veya bu kategorideki tüm kurallar için (Tasarım) yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Aşağıdaki örnekte bu kuralı ihlal eden bir tür ve bloğu doğru uygulayan bir tür gösterilmektedir catch
.
Imports System
Imports System.IO
Namespace ca1031
' Creates two violations of the rule.
Public Class GenericExceptionsCaught
Dim inStream As FileStream
Dim outStream As FileStream
Sub New(inFile As String, outFile As String)
Try
inStream = File.Open(inFile, FileMode.Open)
Catch ex As SystemException
Console.WriteLine("Unable to open {0}.", inFile)
End Try
Try
outStream = File.Open(outFile, FileMode.Open)
Catch
Console.WriteLine("Unable to open {0}.", outFile)
End Try
End Sub
End Class
Public Class GenericExceptionsCaughtFixed
Dim inStream As FileStream
Dim outStream As FileStream
Sub New(inFile As String, outFile As String)
Try
inStream = File.Open(inFile, FileMode.Open)
' Fix the first violation by catching a specific exception.
Catch ex As FileNotFoundException
Console.WriteLine("Unable to open {0}.", inFile)
' For functionally equivalent code, also catch the
' remaining exceptions that may be thrown by File.Open
End Try
Try
outStream = File.Open(outFile, FileMode.Open)
' Fix the second violation by re-throwing the generic
' exception at the end of the catch block.
Catch
Console.WriteLine("Unable to open {0}.", outFile)
Throw
End Try
End Sub
End Class
End Namespace
// Creates two violations of the rule.
public class GenericExceptionsCaught
{
FileStream? inStream;
FileStream? outStream;
public GenericExceptionsCaught(string inFile, string outFile)
{
try
{
inStream = File.Open(inFile, FileMode.Open);
}
catch (SystemException)
{
Console.WriteLine("Unable to open {0}.", inFile);
}
try
{
outStream = File.Open(outFile, FileMode.Open);
}
catch
{
Console.WriteLine("Unable to open {0}.", outFile);
}
}
}
public class GenericExceptionsCaughtFixed
{
FileStream? inStream;
FileStream outStream;
public GenericExceptionsCaughtFixed(string inFile, string outFile)
{
try
{
inStream = File.Open(inFile, FileMode.Open);
}
// Fix the first violation by catching a specific exception.
catch (FileNotFoundException)
{
Console.WriteLine("Unable to open {0}.", inFile);
};
// For functionally equivalent code, also catch
// remaining exceptions that may be thrown by File.Open
try
{
outStream = File.Open(outFile, FileMode.Open);
}
// Fix the second violation by rethrowing the generic
// exception at the end of the catch block.
catch
{
Console.WriteLine("Unable to open {0}.", outFile);
throw;
}
}
}
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Ekinlikler
17 Mar 21 - 21 Mar 10
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolun