2012-11-01 17 views
7

यह सी # और एफ #क्या सी # उपचार प्रकार है जो एफ # से शून्य की अनुमति नहीं देता है अभी भी शून्य?

एफ # में के बीच इंटरॉप,

type test = 
{ 
    value: int 
} 

type Wrapper (value: test) = 
    member val Value = value with get, set 

let trythis = new Wrapper(null) // error as expected 

हालांकि, सी # में है

var trythis = new Wrapper(null); //this runs fine 

उत्तर

8

प्रकार पर गैर-व्यर्थ बाधा एक एफ # विशिष्ट सुविधा है और इसलिए यह करता है .NET में कोई प्रतिनिधित्व नहीं है (और इसलिए सी # इसका सम्मान नहीं करता है)।

वास्तव में, आप यह और भी एफ # में एक असुरक्षित Unchecked.defaultof<_> मूल्य का उपयोग कर वैकल्पिक हल कर सकते हैं:

let trythis = new Wrapper(Unchecked.defaultof<_>) 

यह बहुत उपयोगी है यदि आप एक उद्देश्य यह है कि सी # के संपर्क में है में null के लिए जाँच करना चाहते हैं:

type Wrapper (value: test) = 
    if value = Unchecked.defaultof<_> then 
     invalidArg "value" "Value should not be null." 
    member val Value = value with get, set 
संबंधित मुद्दे