Tôi đang xem bài viết C # - Đối tượng truyền dữ liệu về các DTO tuần tự hóa.
Bài viết bao gồm đoạn mã này:
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;
}
}
Phần còn lại của bài viết có vẻ lành mạnh và hợp lý (với một người mới), nhưng việc ném thử đó ném WtfException ... Điều này có hoàn toàn tương đương với việc không xử lý ngoại lệ không?
Ergo:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
Hay tôi thiếu một cái gì đó cơ bản về xử lý lỗi trong C #? Nó khá giống với Java (trừ các trường hợp ngoại lệ được kiểm tra), phải không? ... Đó là, cả hai đều tinh chế C ++.
Câu hỏi về Stack Overflow Sự khác biệt giữa việc bắt lại tham số ít hơn và không làm gì cả? dường như ủng hộ sự tranh giành của tôi rằng try-Catch-throw là-không-op.
BIÊN TẬP:
Chỉ cần tóm tắt cho bất cứ ai tìm thấy chủ đề này trong tương lai ...
ĐỪNG
try {
// Do stuff that might throw an exception
}
catch (Exception e) {
throw e; // This destroys the strack trace information!
}
Thông tin theo dõi ngăn xếp có thể rất quan trọng để xác định nguyên nhân gốc rễ của vấn đề!
LÀM
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).
}
Nắm bắt các ngoại lệ cụ thể hơn trước các ngoại lệ ít cụ thể hơn (giống như Java).
Người giới thiệu: