Ich schaue auf den Artikel C # - Datenübertragungsobjekt über serialisierbare DTOs.
Der Artikel enthält diesen Code:
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;
}
}
Der Rest des Artikels sieht vernünftig und vernünftig aus (für einen Noob), aber dieser Try-Catch-Wurf löst eine WtfException aus ... Ist das nicht genau gleichbedeutend damit, Ausnahmen überhaupt nicht zu behandeln?
Ergo:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
Oder fehlt mir etwas Grundlegendes zur Fehlerbehandlung in C #? Es ist so ziemlich das gleiche wie Java (minus geprüfte Ausnahmen), nicht wahr? ... Das heißt, beide haben C ++ verfeinert.
Die Frage zum Stapelüberlauf Der Unterschied zwischen dem erneuten Werfen von parameterlosem Fang und dem Nichtstun? scheint meine Behauptung zu unterstützen, dass Try-Catch-Throw ein No-Op ist.
BEARBEITEN:
Nur um es für alle zusammenzufassen, die diesen Thread in Zukunft finden ...
UNTERLASSEN SIE
try {
// Do stuff that might throw an exception
}
catch (Exception e) {
throw e; // This destroys the strack trace information!
}
Die Stack-Trace-Informationen können entscheidend sein, um die Grundursache des Problems zu ermitteln!
TUN
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).
}
Fangen Sie die spezifischeren Ausnahmen vor den weniger spezifischen (genau wie Java).
Verweise: