Каков синтаксис для назначения нескольких значений перечисления свойству в F#?

Я пишу веб-сервис ServiceStack на F# и мне нужно ограничить некоторые функции (например, удалить поддержку SOAP).

В C# я использую конвейерную операцию для назначения нескольких 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 для достижения этой цели, и все остальное, что я пытаюсь сделать, - это попытаться применить функцию к перечислениям. Как мне в этом случае назначить несколько перечислений?

3 ответа

Решение

Используйте тройную трубу:

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
Другие вопросы по тегам