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 catch
fıkra . A atmak BadControlFlowThatShouldBeRewrittenException
muhtemelen 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
.
null
Aksi takdirde geri dönün .
Bu kodun yazıldığı yönteme benziyor, çok fazla şey yapıyor. GetDataFromServer
Bir dönen bool
bir 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 result
ve 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 GetDataFromServer
bir istisna ile patladığında, yutuyor, halının altına itiyor ve bir null
değ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.