ฉันกำลังดูบทความC # - วัตถุการถ่ายโอนข้อมูลบน DTO ที่ต่อเนื่องกันได้
บทความประกอบด้วยรหัสชิ้นนี้:
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;
}
}
ส่วนที่เหลือของบทความดูมีเหตุผลและสมเหตุสมผล (สำหรับ noob) แต่การลองจับการขว้างเป็น WtfException ... นี่มันไม่เทียบเท่ากับการจัดการกับข้อยกเว้นหรือเปล่า?
Ergo:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
หรือฉันขาดพื้นฐานบางอย่างเกี่ยวกับการจัดการข้อผิดพลาดใน C # มันค่อนข้างจะเหมือนกับ Java (ลบด้วยการตรวจสอบข้อยกเว้น) ใช่ไหม? ... นั่นคือพวกเขาทั้งสองได้ปรับปรุง C ++
คำถามสแต็คโอเวอร์โฟลว์ความแตกต่างระหว่างการดักจับพารามิเตอร์น้อยกว่าการจับและไม่ทำอะไรเลย? ดูเหมือนว่าจะสนับสนุนการโต้แย้งของฉันว่าการลองจับการโยนไม่เป็นเรื่องจริง
แก้ไข:
เพียงเพื่อสรุปสำหรับทุกคนที่พบกระทู้นี้ในอนาคต ...
อย่า
try {
// Do stuff that might throw an exception
}
catch (Exception e) {
throw e; // This destroys the strack trace information!
}
ข้อมูลการติดตามสแต็กมีความสำคัญต่อการระบุสาเหตุของปัญหา!
ทำ
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).
}
ตรวจจับข้อยกเว้นเฉพาะเจาะจงมากขึ้นก่อนหน้าข้อ จำกัด ที่เฉพาะเจาะจงน้อยกว่า (เช่น Java)
อ้างอิง: