निम्नलिखित XML उदाहरण को देखते हुए हम एक स्कीमा परिभाषित रूट की कल्पना कर सकते हैं जिसमें टाइप 1 और टाइप 2 के बीच विकल्पों की अनबाउंड संख्या का अनुक्रम शामिल है।विकल्पों की अनुक्रम में क्रम को संरक्षित करना (LINQ से XSD)
<Root>
<Type1 />
<Type2 />
<Type2 />
<Type1 />
</Root>
मैं XSD.exe उपकरण जो हालांकि टाइप-सुरक्षा थोड़ा खीज का एक बहुत है कहते हैं से पलायन का परीक्षण कर रहा हूँ। इस मामले में एक्सएसडी उपकरण बस रूट के भीतर सिस्टम सिस्टम की एक सरणी बनाता है। ऑब्जेक्ट और आपको यह पता लगाना होगा कि किस प्रकार की ऑब्जेक्ट्स (टाइप 1 या टाइप 2) वहां हैं। यह पूरी तरह से सुरुचिपूर्ण नहीं है, लेकिन कम से कम आप आदेश को संरक्षित करते हैं।
समस्या तब होती है जब LINQ से XSD ऑब्जेक्ट बनाता है, यह रूट को टाइप 1 और टाइप 2 की दो स्वतंत्र सूचियों के रूप में परिभाषित करता है। यह बहुत अच्छा है कि यह टाइप-सुरक्षित है, लेकिन अब मैं तत्वों का क्रम खोना प्रतीत होता हूं। मैंने कोडप्लेक्स पर स्रोत से LINQ से XSD बनाया।
LINQ से XSD का उपयोग करके, मैं इन तत्वों के क्रम को कैसे संरक्षित कर सकता हूं?
ठीक है, आप पहले से ही केवल दो विकल्प प्रस्तुत कर चुके हैं। या तो आपको एक कमजोर टाइप किया गया संग्रह मिलता है जो ऑर्डर को सुरक्षित रखता है, या आपको प्रति प्रकार एक दृढ़ता से टाइप किया गया संग्रह मिलता है। दिखाओ कि आप किसी भी एक्सएमएल का उपयोग नहीं कर रहे हैं - आप एक शुद्ध-कोड ऑब्जेक्ट कैसे लिखेंगे जिसमें एक प्रकार का दृढ़ता से टाइप किया गया संग्रह है जिसमें कई प्रकार हैं? –
मेरा प्रश्न यह है कि लिंक से एक्सएसडी का उपयोग करके इस परिदृश्य में तत्वों के क्रम को कैसे संरक्षित किया जाए। मुझे लगता है कि मिश्रित प्रकारों का संग्रह होना चाहिए जिन्हें उन्हें सिस्टम की आवश्यकता होगी। ऑब्जेक्ट (या जो भी माता-पिता उनके समान हैं)। मैं आदेश को संरक्षित करने के लिए इस परिदृश्य w/Linq से XSD में दृढ़ता से टाइप की गई वस्तुओं को छोड़ने के लिए तैयार हूं। मैं उम्मीद कर रहा था कि ऐसा करने के लिए मजबूर करने का एक तरीका था। मेरे उपयोग के मामले में, ऑर्डर मायने रखता है, इसलिए मैं लिंक से एक्सएसडी का उपयोग नहीं कर सका, हालांकि मैं वास्तव में ऐसा करना चाहता हूं क्योंकि XSD.exe – Philip
पर इसके कई फायदे हैं, आप इसे विरासत के साथ कर सकते हैं। यदि टाइप 1 और टाइप 2 दोनों में एक सामान्य बेस क्लास था, तो आपके पास एक IList हो सकता है। अब आपके पास एक एकल, दृढ़ता से टाइप की गई सूची है, और ऑर्डर संरक्षित है।सूची के माध्यम से पुनरावृत्ति करते समय, बस वर्तमान वस्तु के प्रकार की जांच करें। foreach (तत्वों में BaseType एल) { अगर (एल टाइप 1 है) ... else if (एल Type2 है) ... } –