ฉันมักจะเห็นด้วยกับคำเตือนการวิเคราะห์รหัสส่วนใหญ่และฉันพยายามที่จะปฏิบัติตามพวกเขา อย่างไรก็ตามฉันมีเวลายากขึ้นกับสิ่งนี้:
CA1031: อย่าตรวจจับชนิดข้อยกเว้นทั่วไป
ฉันเข้าใจเหตุผลของกฎนี้ แต่ในทางปฏิบัติถ้าฉันต้องการที่จะทำสิ่งเดียวกันโดยไม่คำนึงถึงข้อยกเว้นที่ถูกโยนออกไปทำไมฉันต้องจัดการแต่ละอย่างโดยเฉพาะ? นอกจากนี้หากฉันจัดการข้อยกเว้นเฉพาะจะเกิดอะไรขึ้นถ้ารหัสที่ฉันเรียกจะเปลี่ยนแปลงเพื่อให้เกิดข้อยกเว้นใหม่ในอนาคต ตอนนี้ฉันต้องเปลี่ยนรหัสเพื่อจัดการข้อยกเว้นใหม่นั้น ในขณะที่ถ้าฉันเพียงแค่จับExceptionรหัสของฉันไม่ต้องเปลี่ยน
ตัวอย่างเช่นถ้า Foo เรียกบาร์และ Foo จำเป็นต้องหยุดการประมวลผลโดยไม่คำนึงถึงประเภทของข้อยกเว้นที่เกิดจาก Bar มีข้อได้เปรียบอะไรบ้างในการระบุประเภทของข้อยกเว้นที่ฉันจับได้
อาจเป็นตัวอย่างที่ดีกว่า:
public void Foo()
{
    // Some logic here.
    LogUtility.Log("some message");
}
public static void Log()
{
    try
    {
        // Actual logging here.
    }
    catch (Exception ex)
    {
        // Eat it. Logging failures shouldn't stop us from processing.
    }
}หากคุณไม่ได้รับการยกเว้นทั่วไปที่นี่คุณต้องรับการยกเว้นทุกประเภทที่เป็นไปได้ Patrick มีจุดดีที่OutOfMemoryExceptionไม่ควรจัดการด้วยวิธีนี้ แล้วถ้าฉันต้องการเพิกเฉยทุกข้อยกเว้นOutOfMemoryExceptionล่ะ?
OutOfMemoryErrorซึ่งเป็นแยกออกจากExceptionต้นไม้มรดกด้วยเหตุผลอย่างที่
                
OutOfMemoryExceptionอะไร รหัสการจัดการเช่นเดียวกับทุกอย่างอื่น?