Ich schaue mir den Artikel an C# - Datenübertragungsobjekt auf serialisierbaren DTOs.
Der Artikel enthält diesen Teil des Codes:
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 aus (für einen Laien), aber der try-catch-throw löst eine WtfException aus... Ist das nicht genau das Gleiche, als würde man Ausnahmen überhaupt nicht 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 übersehe ich etwas Grundlegendes zur Fehlerbehandlung in C#? Es ist doch so ziemlich dasselbe wie in Java (abzüglich der geprüften Ausnahmen), oder? ... Das heißt, sie haben beide C++ verfeinert.
Die Stack Overflow-Frage Der Unterschied zwischen dem erneuten Werfen eines parameterlosen Fangs und dem Nichtstun? scheint meine Behauptung zu bestätigen, dass try-catch-throw ein No-op ist.
EDIT:
Nur zur Zusammenfassung für alle, die diesen Thread in Zukunft finden...
NICHT
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 eigentliche Ursache des Problems zu identifizieren!
DO
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 in Java).
Referenzen: