Genellikle çoğu kod analizi uyarısına katılıyorum ve bunlara uymaya çalışıyorum. Ancak bununla daha zor zamanlar geçiriyorum:
CA1031: Genel istisna türlerini yakalamayın
Bu kuralın gerekçesini anlıyorum. Ancak uygulamada, atılan istisnadan bağımsız olarak aynı işlemi yapmak istersem, neden her birini özel olarak ele alacağım? Ayrıca, belirli istisnaları ele alırsam, aradığım kod gelecekte yeni bir istisna oluşturmak üzere değişirse ne olur? Şimdi bu yeni istisnayı ele almak için kodumu değiştirmem gerekiyor. Oysa basitçe yakaladıysam Exception
kodumu değiştirmek zorunda değilsin.
Örneğin, Foo Bar'ı çağırırsa ve Foo'nun Bar tarafından atılan istisna türünden bağımsız olarak işlemeyi durdurması gerekiyorsa, yakaladığım istisna türüne özgü olmanın herhangi bir avantajı var mı?
Belki daha iyi bir örnek:
public void Foo()
{
// Some logic here.
LogUtility.Log("some message");
}
public static void Log()
{
try
{
// Actual logging here.
}
catch (Exception ex)
{
// Eat it. Logging failures shouldn't stop us from processing.
}
}
Burada genel bir istisna yakalamazsanız, mümkün olan her türlü istisnayı yakalamanız gerekir. Patrick'in OutOfMemoryException
bu şekilde ele alınmaması gereken iyi bir noktası var . Peki ya istisnaları görmezden gelmek istersem ama OutOfMemoryException
?
OutOfMemoryError
ayrı olan Exception
bu sebeple miras ağacının
OutOfMemoryException
? Her şeyle aynı kullanım kodu?