2011-06-10 13 views
17

में सरल प्रकार का परीक्षण मैं थोड़ी देर के लिए googling रहा है ... ठीक है, मुझे खेद है, यह पेटी के लिए आसान है, लेकिन वर्ग प्रकार की तुलना करने के लिए एफ # में एक ऑपरेटर है, जैसे 'है' कीवर्ड सी # में? मैं एक पूर्ण उड़ा मैच स्टेटमेंट का उपयोग नहीं करना चाहता हूं या चीजों को कास्टिंग शुरू नहीं करना चाहता हूं। चीयर्सएफ #

उत्तर

25

आप :? निर्माण दोनों एक पैटर्न (match अंदर) के रूप में उपयोग कर सकते हैं या एक ऑपरेटर के रूप में:

let foo = bar :? System.Random 

यह अलग ढंग से सी # में की तुलना में थोड़ा व्यवहार करती है, क्योंकि संकलक अभी भी संकलन में कुछ जांच करने की कोशिश करता -पहर। उदाहरण के लिए, यह इस का उपयोग करने के लिए यदि परिणाम निश्चित रूप से false होगा एक त्रुटि है:

let bar = 42 
let foo = bar :? System.Random // Error 

मुझे नहीं लगता कि यह भ्रम हो सकता है, लेकिन आप हमेशा box जोड़ सकते हैं obj के तर्क परिवर्तित करने के लिए है, जो किसी भी प्रकार के खिलाफ परीक्षण किया जा सकता है:

let foo = box bar :? System.Random 
+0

मुझे लगता है कि यह किया गया है ... यदि मैं इंटरैक्टिव विंडो में इसके साथ खेलता हूं तो यह "टाइप बाधा मेल नहीं खाता" त्रुटियों को जारी रखता है अगर वे एक ही प्रकार के नहीं हैं जो मुझे सुगंध से थोड़ा फेंक देता है ... यह लगता है कि वास्तविक संपादक में ठीक काम करता है। –

+0

@Ciemnl - मैंने भ्रमित चेतावनियों के संभावित स्रोत के बारे में कुछ जानकारी जोड़ा। मुझे यकीन नहीं है कि आप "प्रकार बाधा मेल नहीं खा सकते" हालांकि। –

+1

हाँ यही कारण है कि ... यह देखने के लिए कि क्या यह काम करता है, संकलक मेरे त्वरित परीक्षण के साथ बहुत चालाक था। मैंने एफ # को कम करके आंका! मैं इस भाषा के बारे में सोचने के लिए वास्तव में प्रभावित हूं ... –