Ответ 1
Используйте тройной канал:
EnableFeatures = Feature.Json ||| Feature.Xml ||| Feature.Html ||| Feature.Metadata ||| Feature.Jsv
Я пишу веб-сервис ServiceStack в F # и должен ограничивать некоторые функции (например, удалять поддержку SOAP).
В С# я использую операцию pipe для присвоения нескольким Enums (ServiceStack.ServiceHost.Feature) свойства EnableFeatures, например:
SetConfig(new EndpointHostConfig
{
DebugMode = true, //Show StackTraces in responses in development
EnableFeatures = Feature.Json | Feature.Xml | Feature.Html | Feature.Metadata | Feature.Jsv
});
Однако в F # вы не можете использовать pipe для выполнения этого, и все остальное, что я пытаюсь сделать, - это приложение функции к перечислениям. Как мне назначить несколько перечислений в этом случае?
Используйте тройной канал:
EnableFeatures = Feature.Json ||| Feature.Xml ||| Feature.Html ||| Feature.Metadata ||| Feature.Jsv
Если у вас есть куча, вы можете сэкономить несколько нажатий клавиш с помощью reduce
:
List.reduce (|||) [Feature.Json; Feature.Xml; Feature.Html; Feature.Metadata]
Вы создадите значение, основанное на построении базовых значений:
EnabledFeatures = enum<Feature>(16); // or whatever the full flag value would be for Json + Xml + Html + Metadata, etc