नेट टाइप को देखते हुए, typeof<string>
कहें, रनटाइम पर कैसे string list = []
के बराबर बनाया गया है?किसी विशिष्ट रनटाइम प्रकार की खाली सूची कैसे बनाएं
मेरी प्रेरणा यह है कि FSharpValue.MakeRecord
का उपयोग करते हुए मानों के आधार पर रिकॉर्ड बनाने के लिए मानों को पार्स किए गए मानों को obj[]
के रूप में पारित करने की आवश्यकता है। मैं box
का उपयोग करके तर्कों कास्टिंग कर रहा हूं और उसने सूचियों को छोड़कर काम किया है। मेरे सामने आने वाली समस्या यह है कि एक खाली अनियमित सूची सूची को बॉक्स नहीं किया जा सकता है और फिर अनबॉक्स किया जा सकता है। विशिष्ट लौटे त्रुटि है:
System.InvalidCastException: Unable to cast object of type
'Microsoft.FSharp.Collections.FSharpList`1[System.Object]'
to type
'Microsoft.FSharp.Collections.FSharpList`1[System.String]'.
एक खाली टाइप सूची बॉक्सिंग और अनबॉक्स्ड जा सकती है, तो मैं एक क्रम प्रकार, उदाहरण के लिए एक सूची कास्ट करने के लिए एक रास्ता खोजने के लिए कोशिश की है < टाइप करके एक प्रकार लौटाया गया है लेकिन बिना किसी किस्मत के।
type Test = {Names : string list}
// fails
let genericList = []
{Names = unbox (box genericList)}
//works
let typedList : string list = []
{Names = unbox (box typedList)}
//works
let genericNonEmptyList = ["Bill"]
{Names = unbox (box genericNonEmptyList)}
यह प्रतिबिंब का उपयोग करके किया जा सकता है। हालांकि आम तौर पर यह संकेत मिलता है कि आपको –
डिज़ाइन पर पुनर्विचार करना चाहिए, Seq.cast क्या आप चाहते हैं? क्षमा करें अगर मैं ओपी को गलत समझता हूं: 'जेनेरिकलिस्ट |> Seq.cast '। –
s952163
जॉन, कोई संकेत यह प्रतिबिंब के साथ कैसे करें?मैंने "अहम" को रास्ता तलाशने के बारे में काफी कुछ बताया है, लेकिन जहां तक मैं देख सकता हूं कि ऐसा करने का कोई स्पष्ट तरीका नहीं है। – jbeeko