Bu cevapta açıklandığı gibi, performans isabeti büyük olasılıkla ihmal edilebilir .
Bu yüzden performansın bir sorun olmadığı fikrine geçelim. Sen atıyorlar System.Exception, sadece içine yürütülmesine taşımak için catchfıkra . A atmak BadControlFlowThatShouldBeRewrittenExceptionmuhtemelen aşırıya kaçmış olurdu.
Bunu parçalayalım. Sahibiz:
- Yöntem
GetDataFromServer(yöntem adları C # içinde PascalCase olmalıdır) bool.
- Sonuç buysa
true, çalıştırın ProcessData.
nullAksi takdirde geri dönün .
Bu kodun yazıldığı yönteme benziyor, çok fazla şey yapıyor. GetDataFromServerBir dönen boolbir tasarım hatası gibi görünüyor, ben bu yöntemi bekliyor olurdu o sunucudan gidiyor veri döndürecek , bazı IEnumerable<SomeType>yani mutlu yol döner - 0 veya daha fazla öğe içerecektir n öğeleri n> 0 -so-mutlu değil, path 0 öğe döndürür ve mutsuz yol işlenmemiş bir istisna ile patlar, her neyse.
Bu, yöntemin görünüşünü çok değiştirir - yine bunun mantıklı olup olmadığını söylemek zordur, çünkü orijinal yazı sadece bir çıkış noktasına sahiptir (ve böylece tüm kod yolları bir değer döndürmediği için derlenmeyecektir ), bu sadece vahşi bir tahmin:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
Burada ProcessData, onun yinelendiğini görürsünüz resultve nullöğesinde hiçbir öğe yoksa geri döner IEnumerable.
Şimdi yöntem neden geri dönüyor null? Sunucu çöktü mü? Sorguda bir hata var mı? Bağlantı dizesi yanlış kimlik bilgilerini kullanıyor mu? Beklemediğiniz GetDataFromServerbir istisna ile patladığında, yutuyor, halının altına itiyor ve bir nulldeğer döndürüyorsunuz . Bu durumda belirli istisnaları yakalamanızı ve diğer her şeyi günlüğe kaydetmenizi öneririm; hata ayıklama bu şekilde çok daha kolay olacaktır.
catchİstisnayı yakalamayan genel bir maddeyle, hiçbir şeyi teşhis etmek oldukça zorlaşır. Bunun yerine minimal olarak yapardım:
catch(Exception e)
{
return null;
}
Şimdi en azından bir eşeyler ters gidip gitmediğini inceleyebilir ve inceleyebilirsiniz .
TL; DR : Hayır, akış kontrolü için istisnalar atmak ve yakalamak iyi bir fikir değil.