जब कस्टम अपवाद के साथ काम कर, मैं आमतौर पर अपवाद से विरासत और फिर कुछ फ़ील्ड्स जोड़ने/मेरी अपवाद वर्ग के लिए गुण कुछ अतिरिक्त जानकारी स्टोर करने के लिए:कस्टम अपवादों के अंदर डेटा को कैसे स्टोर किया जाना चाहिए?
public class MyException : Exception
{
public int ErrorCode{get;set;}
public MyException()
{}
}
उपरोक्त उदाहरण में, ErrorCode
मूल्य अपवाद में संग्रहित है , जिसका मतलब है कि मुझे इसे संरक्षित कन्स्ट्रक्टर में SerializationInfo
ऑब्जेक्ट से और GetObjectData
विधि से अधिक ऑब्जेक्ट से जोड़ना होगा और फिर से सेवानिवृत्त करना होगा।
कुंजी/मान जोड़े कि अपवाद के बारे में अतिरिक्त उपयोगकर्ता परिभाषित जानकारी प्रदान करते हैं का संग्रह हो जाता है:
अगर मैं Data
अंदर त्रुटि कोड की दुकान, यह (परावर्तक के अनुसार) अपवाद वर्ग से मेरे लिए धारावाहिक मिल जाएगा, जिसका अर्थ है कि मेरी अपवाद वर्ग अब की तरह दिखता है:
public class MyException : Exception
{
public int ErrorCode
{
get {return (int) Data["ErrorCode"];}
set {Data["ErrorCode"] = value;}
}
public MyException()
{}
}
यह साधन कि त्रुटि कोड के प्राप्त/सेट से निपटने में थोड़ा और काम है (जैसे कास्टिंग त्रुटियों और परिस्थितियों से निपटने की तरह जहां त्रुटि कोड शब्दकोश में नहीं हो सकता है), मुझे serialising के बारे में चिंता करने की ज़रूरत नहीं है/deserialising।
क्या यह एक ही चीज़ को प्राप्त करने के केवल दो अलग-अलग तरीकों से है, या किसी अन्य तरीके से दूसरे पर कोई स्पष्ट लाभ नहीं है (उन लोगों के अलावा जिन्हें मैंने पहले ही उल्लेख किया है)?