@Termit और @Burnzy आगे अच्छा factory methods से जुड़े समाधान डाल दिया।
समस्या यह है कि आप संदिग्ध रिटर्न के लिए अतिरिक्त तर्क (अधिक परीक्षण, अधिक त्रुटियों) के समूह के साथ अपना पार्सिंग दिनचर्या लोड कर रहे हैं।
ऐसा करने का एक और तरीका टाइप किए गए पढ़ने के तरीकों के साथ सरलीकृत स्ट्रिंग-आधारित डेटाफिल्ड का उपयोग करना होगा - this प्रश्न के लिए शीर्ष उत्तर।
एक टाइप किया-मूल्य विधि का कार्यान्वयन और अच्छा होगा, लेकिन केवल मूल्य प्रकार के लिए काम करता है (जो तार शामिल नहीं है लेकिन datetimes शामिल करता है):
public T? TypedValue<T>()
where T : struct
{
try { return (T?) Convert.ChangeType(this.Value, typeof(T)); }
catch { return null; }
}
मुझे लगता है कि आप यह सोचते हैं हूँ ' क्षेत्र में उपयोगकर्ता-नियंत्रण को गतिशील रूप से असाइन करने जैसी चीजों को करने के लिए प्रकार की जानकारी का उपयोग करना चाहते हैं, सत्यापन नियम, दृढ़ता के लिए सही एसक्यूएल प्रकार आदि
मैंने इस तरह की चीजों को दृष्टिकोण के साथ किया है जो लगता है तुम्हारी तरह थोड़ा
दिन के अंत में आपको अपने कोड से अपने मेटाडेटा को अलग करना चाहिए - @ बर्जी का जवाब मेटाडेटा (डेटाफ़िल्ल्ड तत्व की "प्रकार" विशेषता) के आधार पर कोड चुनता है और इसका एक बहुत ही सरल उदाहरण है।
यदि आप एक्सएमएल से काम कर रहे हैं, तो एक्सएसडी मेटाडेटा का एक बहुत उपयोगी और एक्स्टेंसिबल रूप है।
जहाँ तक क्या आप में प्रत्येक फ़ील्ड के डेटा स्टोर के रूप में - क्योंकि उपयोग तार:
- वे नल
- वे
- वे अमान्य मान स्टोर कर सकते हैं (करने के लिए उपयोगकर्ता बता बनाता आंशिक मान संग्रहीत कर सकते हैं तरह उनके बाहर अधिनियम को अधिक पारदर्शी)
- वे क्योंकि वहाँ किसी भी
नहीं हैं सूचियों
- विशेष मामलों स्टोर कर सकते हैं असंबंधित कोड पर हमला नहीं करेगा
- , नियमित अभिव्यक्ति जानने को मान्य, खुश
- आप उन्हें मजबूत प्रकार के लिए वास्तव में आसानी से
परिवर्तित कर सकते हैं हो सकता है मैंने पाया यह बहुत इस तरह थोड़ा चौखटे विकसित करने के लिए पुरस्कृत - यह एक शिक्षण अनुभव है और आप बाहर आया हूँ यूएक्स और मॉडलिंग की वास्तविकता के बारे में बहुत कुछ समझना। , (समयावधि)
विशेष रूप से
-
- सूचियों - बहु-चयन विदेशी कुंजी आदि
- शून्य मान
- अमान्य इनपुट - यह आम तौर पर मूल मूल्य
तार का उपयोग करते हुए यह सब सरल बहुत है क्योंकि यह आप स्पष्ट रूप से करने की अनुमति देता को बनाए रखना शामिल है आपके ढांचे के भीतर सीमांकन जिम्मेदारियां। अपने जेनेरिक मॉडल में सूचियों वाले फ़ील्ड करने के बारे में सोचें - यह बालों को जल्दी से जल्दी हो जाता है और प्रत्येक विधि में सूचियों के लिए एक विशेष मामले के साथ समाप्त करना आसान है। तारों के साथ, हिरन वहां रुक जाता है।
अंत में, यदि आप कुछ भी करने के बिना इस तरह के सामान के ठोस कार्यान्वयन चाहते हैं, तो DataSets पर विचार करें - पुराने स्कूल मुझे पता है - वे सभी अद्भुत चीजें करते हैं जिन्हें आप उम्मीद नहीं करेंगे लेकिन आपको आरटीएफएम करना होगा ।
उस विचार का मुख्य पतन यह होगा कि यह WPF डेटा बाध्यकारी के साथ संगत नहीं है - हालांकि मेरा अनुभव यह है कि वास्तविकता WPF डेटा बाध्यकारी के साथ संगत नहीं है।
मुझे आशा है कि मैं अपने इरादों को सही ढंग से व्याख्या की - सौभाग्य किसी भी तरह :)
मुझे लगता है आप को पता है DataField किस उपवर्ग आप वैसे भी कभी नहीं जा रहे हैं की तरह है, तो क्यों न सिर्फ 'वर्ग DataField {स्ट्रिंग नाम का उपयोग करें; ऑब्जेक्ट वैल्यू;} '? –
मैं वास्तव में ऑब्जेक्ट के रूप में सभी मानों को संदर्भित नहीं करना चाहता हूं। अगर मैं एक समान दृष्टिकोण लेना चाहता था, तो क्लास डेटाफिल्ड {स्ट्रिंग नाम का उपयोग करना आसान लगेगा; स्ट्रिंग प्रकार; स्ट्रिंग मान}। –
निश्चित रूप से, लेकिन फिर आपको इसका उपयोग करने से पहले हर बार अपने डेटा को पार्स करना होगा। यदि आप ऑब्जेक्ट में डेटा को प्री-पार्स करते हैं, और फिर उन्हें डेटा फ़ील्ड में स्टोर करते हैं, तो आप उन्हें इस्तेमाल कर सकते हैं जब आप उनका उपयोग करने के लिए तैयार हों। यह ADO.NET डेटा रीडर के साथ करता है (हालांकि डेटा रीडर कॉलम मानों की आवश्यकता होने तक पार्सिंग के निष्पादन में देरी करता है)। उदाहरण के लिए, 'अगर (myField.Value डेटटाइम है {/ * उस तारीख की चीज़ * /} 'या' if (myField.Name == "importantDateThing") {var date = (dateTime) myField.Value;/* महत्वपूर्ण है तिथि बात * /} ' –