Saya sedang melihat artikel C # - Data Transfer Object pada DTO serializable.
Artikel ini termasuk potongan kode ini:
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;
}
}
Sisa artikel ini terlihat waras dan masuk akal (untuk noob), tapi coba-coba-lempar melempar WtfException ... Bukankah ini sama dengan tidak menangani pengecualian sama sekali?
Jadi:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
Atau apakah saya melewatkan sesuatu yang mendasar tentang penanganan kesalahan di C #? Ini hampir sama dengan Java (minus pengecualian yang diperiksa), bukan? ... Yaitu, mereka berdua menyempurnakan C ++.
Pertanyaan Stack Overflow Perbedaan antara melempar kembali parameter-less catch dan tidak melakukan apa-apa? tampaknya mendukung pendapat saya bahwa try-catch-throw adalah-no-op.
EDIT:
Hanya untuk meringkas bagi siapa saja yang menemukan utas ini di masa depan ...
TIDAK
try {
// Do stuff that might throw an exception
}
catch (Exception e) {
throw e; // This destroys the strack trace information!
}
Informasi jejak tumpukan dapat menjadi sangat penting untuk mengidentifikasi akar penyebab masalah!
MELAKUKAN
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).
}
Tangkap pengecualian yang lebih spesifik sebelum yang kurang spesifik (seperti Java).
Referensi: