2012-11-25 8 views
18

मुझे पता है कि च # में मैं एक परिणाम टपल के सदस्यों जब मैं उन्हें एफ # से उपयोग कर रहा हूँ, उदा out मानकों का इलाज कर सकते हैं कि कैसे बना सकता हूँमैं एक सदस्य एफ # में एक बाहर पैरामीटर

(success, i) = System.Int32.TryParse(myStr) 

क्या मैं जानना चाहते हैं मैं एक सदस्य हस्ताक्षर है कि एक out पैरामीटर होने के रूप में सी # के लिए प्रकट होता है करने के लिए कैसे परिभाषित है।

यह यह करने के लिए संभव है? और क्या मैं सिर्फ एक टुपल वापस कर सकता हूं और जब मैं सी # से विधि को कॉल करता हूं तो विपरीत प्रक्रिया होती है, उदा।

type Example() = 
    member x.TryParse(s: string, success: bool byref) 
    = (false, Unchecked.defaultof<Example>) 

उत्तर

18

नहीं, आप एक टपल के रूप में परिणाम नहीं लौट सकते हैं - आप समारोह से परिणाम लौटने से पहले ByRef मूल्य के लिए मूल्य सौंपने होंगे। [<Out>] विशेषता भी ध्यान दें - यदि आप इसे छोड़ देते हैं, तो पैरामीटर सी # ref पैरामीटर की तरह कार्य करता है।

open System.Runtime.InteropServices 

type Foo() = 
    static member TryParse (str : string, [<Out>] success : byref<bool>) : Foo = 
     // Manually assign the 'success' value before returning 
     success <- false 

     // Return some result value 
     // TODO 
     raise <| System.NotImplementedException "Foo.TryParse" 

आप अपने विधि एक विहित सी # Try हस्ताक्षर करना चाहते हैं (जैसे, Int32.TryParse), आप अपने विधि से एक bool लौट सकते हैं और पास करना चाहिए संभवतः-पार्स Foobyref<'T> के माध्यम से वापस, इसलिए जैसे:

open System.Runtime.InteropServices 

type Foo() = 
    static member TryParse (str : string, [<Out>] result : byref<Foo>) : bool = 
     // Try to parse the Foo from the string 
     // If successful, assign the parsed Foo to 'result' 
     // TODO 

     // Return a bool indicating whether parsing was successful. 
     // TODO 
     raise <| System.NotImplementedException "Foo.TryParse" 
4
open System.Runtime.InteropServices 

type Test() = 
    member this.TryParse(text : string, [<Out>] success : byref<bool>) : bool = 
     success <- false 
     false 
let ok, res = Test().TryParse("123") 
संबंधित मुद्दे