मैं सीरीयल डीटीओ पर डेटा ट्रांसफर ऑब्जेक्ट सी # - आर्टिकल देख रहा हूं ।
लेख में कोड का यह टुकड़ा शामिल है:
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 # में त्रुटि से निपटने के बारे में कुछ मौलिक याद आ रही है? यह जावा (माइनस चेक अपवाद) के रूप में बहुत अधिक है, है ना? ... अर्थात्, वे दोनों 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).
}
कम विशिष्ट लोगों (जावा की तरह) से पहले अधिक विशिष्ट अपवादों को पकड़ो।
संदर्भ: