में जेनेरिक प्रकार की सूची में ऑब्जेक्ट को कैसे डाला जाए, निम्न स्निपेट में मेरा इरादा एक सिस्टम को परिवर्तित करना है। ऑब्जेक्ट (जो एक FSharpList हो सकता है) जो भी सामान्य प्रकार की होल्डिंग की सूची में है।एफ #
match o with
| :? list<_> -> addChildList(o :?> list<_>)
| _ -> addChild(o)
दुर्भाग्य से केवल list<obj>
कभी एक सूची के रूप में मिलान किया जाता है। मुझे list<Foo>
भी एक सूची के रूप में मिलान किया जाना चाहिए।
कुछ संदर्भों के लिए, मैं कक्षा और उसके बच्चों के वृक्ष दृश्य बनाने के लिए प्रतिबिंब द्वारा किसी ऑब्जेक्ट संरचना को पार करने की कोशिश कर रहा हूं। निम्नलिखित वर्ग पर विचार करें:
type Entity = {
Transform : Matrix
Components : obj list
Children : Entity list
}
मैं एक पेड़ बनाना चाहता हूं जो मुझे इकाई में निहित सभी वर्ग दिखाता है। प्रतिबिंब के माध्यम से, मैं किसी ऑब्जेक्ट के सभी गुणों और उनके मानों को भी प्राप्त कर सकता हूं (मान महत्वपूर्ण है, क्योंकि मैं तत्व की नाम संपत्ति के साथ सूची में विभिन्न तत्वों को प्रदर्शित करना चाहता हूं यदि यह एक है):
let o = propertyInfo.GetValue(obj, null)
यह मान किसी प्रकार की सूची हो सकता है, लेकिन मूल्य वापसी केवल एक सिस्टम है। ऑब्जेक्ट इस ऑब्जेक्ट को किसी सूची में कनवर्ट करने का प्रयास करते समय मैं समस्याओं में भाग लेता हूं। मैं बिल्कुल प्रकार है कि मैं करने के लिए कन्वर्ट करने के लिए कोशिश कर रहा हूँ में बताने की
match o with
| :? list<obj> -> addChildList(o :?> list<obj>)
| :? list<Entity> -> addChildList(o :?> list<Entity>)
| _ -> addChild(o)
यहाँ: मैं निम्न कार्य करने के लिए मजबूर कर रहा हूँ।
मैं वास्तव में इस लिखने के लिए करना चाहते हैं:
match o with
| :? list<_> -> addChildList(o :?> list<_>)
| _ -> addChild(o)
दुर्भाग्य से यह केवल कभी list<obj>
क्या आपको वास्तव में टाइप की गई सूची की आवश्यकता है? ऐसा लगता है कि मुझे 'आईनेमेरेबल' से मेल खाना पर्याप्त होगा। –