में कोड ब्लॉक लिखने के लिए (IDISposable obj = new ...) का उपयोग करके मैंने उपयोग कथन के साथ धाराओं में ब्लॉक लिखने के लिए IDISposable लागू करने वाले वर्गों का उपयोग करना शुरू कर दिया है। यह सही घोंसले रखने और लापता या गलत तरीके से शुरू/अंत भागों से बचने में मददगार है।स्ट्रीम में कोड ब्लॉक (उदा। एक्सएमएल)
असल में, कन्स्ट्रक्टर एक ब्लॉक (जैसे एक्सएमएल टैग खोलना) की शुरुआत लिखता है, अंत (उदा। एक्सएमएल टैग बंद करें)। उदाहरण नीचे UsableXmlElement है (यह बड़े एक्सएमएल के लिए है, इसलिए स्मृति में LINQ से XML या XmlDocument में कोई विकल्प नहीं है)।
हालांकि, ये आईडीस्पोजेबल माइक्रोसॉफ्ट द्वारा अनुशंसित परिष्कृत पैटर्न को कार्यान्वित नहीं करता है, विनाशक/फाइनलाइजर, अलग निपटान (बूल) विधि और जीसी। सप्रेसप्रेसफिनलाइज()। निपटान केवल अंत तत्व लिखता है, और यही वह है।
क्या इसके लिए कोई नीचे की ओर है, या यह तत्वों के सही घोंसले को बनाए रखने का एक अच्छा तरीका है?
class UsableXmlElement : IDisposable
{
private XmlWriter _xwriter;
public UsableXmlElement(string name, XmlWriter xmlWriter)
{
_xwriter = xmlWriter;
_xwriter.WriteStartElement(name);
}
public void WriteAttribute<T>(string name, T value)
{
_xwriter.WriteStartAttribute(name);
_xwriter.WriteValue(value);
_xwriter.WriteEndAttribute();
}
public void WriteValue<T>(T value)
{
_xwriter.WriteValue(value);
}
public void Dispose()
{
_xwriter.WriteEndElement();
}
}
प्रयोग इस तरह है:
<RootElement DocVersion="123">
<InnerElement>
<!-- anything -->
</InnerElement>
</RootElement>
यह समस्या क्यों होनी चाहिए? आप अपने UsableXmlElement में किसी भी अप्रबंधित संसाधनों को प्राप्त नहीं करते हैं, इसलिए आपको किसी भी अंतिमकर्ता की आवश्यकता नहीं है, मुझे लगता है ... – user1096188
ओह, और आपको जेनेरिक होने के लिए WriteValue और WriteAttribute की आवश्यकता नहीं है। यह कुछ भी नहीं करता है, _xwriter.WriteValue हमेशा ऑब्जेक्ट पैरामीटर के साथ बुलाया जाएगा। – user1096188
हममम्म ........ – code4life