Ben seri hale getirilebilir DTOs Veri Transferi Nesne C # makalesine bakıyorum .
Makale bu kod parçasını içerir:
public static string SerializeDTO(DTO dto) {
try {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
catch(Exception ex) {
throw ex;
}
}
Makalenin geri kalanı aklı başında ve mantıklı görünüyor (ama bir noob'a), bu try-catch-throw bir WtfException oluşturur ... Bu, istisnaları hiç ele almamakla tamamen eşdeğer değil mi?
Ergo:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
Yoksa C # hata işleme hakkında temel bir şey eksik mi? Java (eksi işaretli istisnalar) ile hemen hemen aynı, değil mi? ... Yani, ikisi de C ++ 'ı rafine etti.
Yığın Taşması sorusu Parametresiz yakalamayı yeniden atmak ve hiçbir şey yapmamak arasındaki fark nedir? denemek-yakalamak-at-bir-op olduğunu benim görüş destekliyor gibi görünüyor.
DÜZENLE:
Gelecekte bu konuyu bulan herkes için özetlemek gerekirse ...
YAPMA
try {
// Do stuff that might throw an exception
}
catch (Exception e) {
throw e; // This destroys the strack trace information!
}
Yığın izleme bilgisi, sorunun temel nedenini belirlemek için çok önemli olabilir!
YAPMAK
try {
// Do stuff that might throw an exception
}
catch (SqlException e) {
// Log it
if (e.ErrorCode != NO_ROW_ERROR) { // filter out NoDataFound.
// Do special cleanup, like maybe closing the "dirty" database connection.
throw; // This preserves the stack trace
}
}
catch (IOException e) {
// Log it
throw;
}
catch (Exception e) {
// Log it
throw new DAOException("Excrement occurred", e); // wrapped & chained exceptions (just like java).
}
finally {
// Normal clean goes here (like closing open files).
}
Daha az özel olanlardan önce (tıpkı Java gibi) daha özel istisnaları yakalayın.
Referanslar: