निष्पादित करने से पहले डिस्पोज़ करता है मैंने एक विशिष्ट फ़ाइल पर बने रहने के लिए अपनी खुद की कस्टम डेटा परत लिखी है और मैंने इसे कस्टम डेटाकॉन्टेक्स्ट पैटर्न के साथ सारणीबद्ध किया है।उपयोग() {} ब्लॉक के अंदर उपज रिटर्न स्टेटमेंट
यह सभी .NET 2.0 फ्रेमवर्क (लक्ष्य सर्वर के लिए बाधाओं को देखते हुए) पर आधारित है, हालांकि यह कुछ LINQ-to-SQL की तरह दिख सकता है, इसकी नहीं! मैंने अभी एक समान डेटा पैटर्न लागू किया है।
ऐसी स्थिति के उदाहरण के लिए नीचे उदाहरण देखें जो मैं अभी तक समझा नहीं सकता।
पशु की सभी आवृत्तियों प्राप्त करने के लिए - मैं यह करने के लिए और इसे
public IEnumerable<Animal> GetAllAnimals() {
foreach (var animalName in AnimalXmlReader.GetNames())
{
yield return GetAnimal(animalName);
}
}
AnimalDataContext नीचे AnimalDataContext() में ठीक
public static IEnumerable<Animal> GetAllAnimals() {
AnimalDataContext dataContext = new AnimalDataContext();
return dataContext.GetAllAnimals();
}
और GetAllAnimals के कार्यान्वयन() विधि काम करता है () IDISposable लागू करता है क्योंकि मुझे वहां XmlTextReader मिला है और मैं यह सुनिश्चित करना चाहता हूं कि यह जल्दी से साफ हो जाए।
अब अगर मैं इतना
public static IEnumerable<Animal> GetAllAnimals() {
using(AnimalDataContext dataContext = new AnimalDataContext()) {
return dataContext.GetAllAnimals();
}
}
की तरह एक बयान का उपयोग कर के अंदर पहली कॉल लपेट और (पहली बार में AnimalDataContext.GetAllAnimals की पहली पंक्ति में एक को तोड़ने सूत्री डाल) विधि और एक अन्य को तोड़ने बिंदु विधि AnimalDataContext.Dispose() में लाइन, और निष्पादित ...
निपटान() विधि सबसे पहले कहा जाता है ताकि AnimalXmlReader.GetNames() देता है "ऑब्जेक्ट संदर्भ ऑब्जेक्ट की उदाहरण के लिए सेट नहीं" अपवाद क्योंकि AnimalXmlReader है निपटान में शून्य करने के लिए सेट किया गया है() ???
कोई विचार? मैं एक कूबड़ है कि इससे संबंधित करने के लिए उपज वापसी एक कोशिश कैच ब्लॉक के अंदर कहा जा करने की अनुमति नहीं किया जा रहा है, जो का उपयोग कर प्रभावी ढंग से प्रतिनिधित्व करता है, एक बार संकलित ...
यह मूलतः समस्याओं मैं का सामना किया है में से एक है, यहाँ मेरे सवाल देखें:: इस तरह ब्लॉक का उपयोग आप तक बंद नहीं किया जाएगा कि प्रगणक का उपयोग बंद http://stackoverflow.com/questions/1524367 –