2011-12-21 6 views
7

:का प्रयोग एफ # ऑप्शन में टाइप करें मैं निम्न प्रकार है सी #

and ListInfo() = 

let mutable count = 0 

// This is a mutable option because we can't have an infinite data structure. 
let mutable lInfo : Option<ListInfo> = None 

let dInfo = new DictInfo() 
let bInfo = new BaseInfo() 

member this.BaseInfo = bInfo 
member this.DictInfo = dInfo 

member this.LInfo 
    with get() = lInfo 
    and set(value) = lInfo <- Some(value) 

member this.Count 
    with get() = count 
    and set(value) = count <- value 

जहां पुनरावर्ती "सूची की जानकारी" एक विकल्प है। या तो कोई है या कोई नहीं है। मुझे इसे सी # से उपयोग करने की ज़रूरत है लेकिन मुझे त्रुटियां मिलती हैं। यह एक नमूना उपयोग है:

if (FSharpOption<Types.ListInfo>.get_IsSome(listInfo.LInfo)) 
{ 
    Types.ListInfo subListInfo = listInfo.LInfo.Value; 
    HandleListInfo(subListInfo, n); 
} 

यहां सूचीइंफो उपरोक्त के रूप में ListInfo प्रकार है। मैं सिर्फ यह जांचने की कोशिश कर रहा हूं कि इसमें कोई मूल्य है और यदि ऐसा है तो मैं इसका उपयोग करना चाहता हूं। लेकिन सभी एक्सेस सूचीInfo.LInfo त्रुटि देता है "संपत्ति, अनुक्रमणिका या घटना सूचीInfo.LInfo भाषा द्वारा समर्थित नहीं है ..."

कोई भी जो समझता है क्यों?

+0

मुझे नहीं लगता कि समस्या ऑप्शन प्रकार से कोई लेना देना नहीं है कि ... यह एक संपत्ति एफ # में घोषित मान्यता प्राप्त नहीं है की तरह लग रहा सी # –

उत्तर

3

मुझे संदेह है कि समस्या LInfo संपत्ति गेटर/सेटटर विभिन्न प्रकारों (जो सी # में समर्थित नहीं है) के साथ काम करती है।

प्रयास करें इस

member this.LInfo 
    with get() = lInfo 
    and set value = lInfo <- value 

या इस

member this.LInfo 
    with get() = match lInfo with Some x -> x | None -> Unchecked.defaultof<_> 
    and set value = lInfo <- Some value 
+0

द्वारा धन्यवाद, पहला समाधान ठीक काम करता था इसलिए मैं उसके साथ गया। – UmaN

+3

यह सिर्फ इतना नहीं है कि यह सी # द्वारा समर्थित नहीं है - मुझे नहीं लगता कि इसे F # में समर्थित किया जाना चाहिए ... – kvb

+7

@kvb: आप सही हैं: spec के सेक्शन 8.13.1 से: _ अगर किसी संपत्ति सदस्य के पास है गेटटर और एक सेटटर दोनों, और न ही एक सूचकांक है, फिर गेटटर और सेटर दोनों के हस्ताक्षरों को एक ही संपत्ति प्रकार का संकेत देना चाहिए ._ – Daniel