Estoy mirando el artículo C # - Objeto de transferencia de datos en DTO serializables.
El artículo incluye esta pieza de código:
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;
}
}
El resto del artículo parece sensato y razonable (para un novato), pero ese intento de atrapar arroja una excepción Wtf ... ¿No es esto exactamente equivalente a no manejar excepciones en absoluto?
Es decir:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
¿O me estoy perdiendo algo fundamental sobre el manejo de errores en C #? Es más o menos lo mismo que Java (menos las excepciones marcadas), ¿no? ... Es decir, ambos refinaron C ++.
La pregunta de desbordamiento de pila ¿ La diferencia entre volver a lanzar capturas sin parámetros y no hacer nada? parece apoyar mi opinión de que try-catch-throw es un no-op.
EDITAR:
Solo para resumir para cualquiera que encuentre este hilo en el futuro ...
NO HAGA
try {
// Do stuff that might throw an exception
}
catch (Exception e) {
throw e; // This destroys the strack trace information!
}
¡La información de seguimiento de la pila puede ser crucial para identificar la causa raíz del problema!
HACER
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).
}
Capture las excepciones más específicas antes que las menos específicas (como Java).
Referencias