2012-05-18 10 views
10

मैं एफ # में सर्विसस्टैक webservice लिख रहा हूं और कुछ सुविधाओं को सीमित करने की आवश्यकता है (उदाहरण के लिए SOAP समर्थन को हटा रहा हूं)।F # में किसी संपत्ति को एकाधिक enum मान असाइन करने के लिए वाक्यविन्यास क्या है?

सी # में मैं बहुत की तरह EnableFeatures संपत्ति के लिए कई Enums (ServiceStack.ServiceHost.Feature) आवंटित करने के लिए पाइप आपरेशन उपयोग कर रहा हूँ:

SetConfig(new EndpointHostConfig 
{ 
    DebugMode = true, //Show StackTraces in responses in development 
    EnableFeatures = Feature.Json | Feature.Xml | Feature.Html | Feature.Metadata | Feature.Jsv 
}); 

हालांकि एफ # में आप यह पूरा करने के पाइप का उपयोग नहीं कर सकते हैं, और मैं जो कुछ भी कोशिश करता हूं वह enums के लिए फ़ंक्शन एप्लिकेशन करने का प्रयास कर रहा है। मैं इस मामले में एकाधिक enums असाइन करने के बारे में कैसे जा सकता हूँ?

+3

आप पहले से ही एक जवाब मिल गया है, लेकिन यह ध्यान देने योग्य बात यह एक पाइप ऑपरेटर, यह नहीं है लायक है 'द्वि twise या '। क्रेग स्टंटज़ द्वारा इंगित एफ एफ की बिटवाई या ऑपरेटर, '|||' है। –

+2

मुझे लगता है कि यह '||||||' है ... ओह रुको, नहीं, केवल '|||'। – Daniel

+1

@botanist आपको यहां देखने के लिए अच्छा है - यहां कुछ वास्तव में स्मार्ट एफ # लोग हैं। और मैं भी हूँ। –

उत्तर

18

एक ट्रिपल पाइप का उपयोग करें:

EnableFeatures = Feature.Json ||| Feature.Xml ||| Feature.Html ||| Feature.Metadata ||| Feature.Jsv 
+0

धन्यवाद सर! मैंने सोचा कि मैं कुछ आसान याद कर रहा था, और वास्तव में मैं था। [एफ # बिटवाईयर ऑपरेटर] (http://msdn.microsoft.com/en-us/library/dd469495.aspx) –

1

आप होगा अंतर्निहित मूल्यों के निर्माण के आधार पर मूल्य बनाने:

EnabledFeatures = enum<Feature>(16); // or whatever the full flag value would be for Json + Xml + Html + Metadata, etc 
+6

आप कर सकते थे, लेकिन यही कारण है कि हमारे पास झंडे के लिए प्रतीकात्मक नाम हैं और बिटवाइज ऑपरेटरों को पहली जगह में जोड़ते हैं - इसलिए हमें यह नहीं करना है। –

12

आप उनमें से एक गुच्छा है, तो आप कुछ ही कीस्ट्रोक को बचा सकता है reduce साथ:

List.reduce (|||) [Feature.Json; Feature.Xml; Feature.Html; Feature.Metadata]