servicestack,F#,Enums,servicestack" /> servicestack,F#,Enums,servicestack" />

将多个枚举值分配给F#中的属性的语法是什么?

将多个枚举值分配给F#中的属性的语法是什么?,f#,enums,servicestack,F#,Enums,servicestack,我正在用F#编写ServiceStack webservice,需要限制一些特性(例如删除SOAP支持) 在C#中,我使用管道操作将多个枚举(ServiceStack.ServiceHost.Feature)分配给EnableFeatures属性,如下所示: SetConfig(new EndpointHostConfig { DebugMode = true, //Show StackTraces in responses in development EnableFeatur

我正在用F#编写ServiceStack webservice,需要限制一些特性(例如删除SOAP支持)

在C#中,我使用管道操作将多个枚举(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#中,您不能使用管道来实现这一点,我尝试的其他方法都是尝试对枚举执行函数应用程序。在这种情况下,如何分配多个枚举?

您将根据基础值的构造创建值:

EnabledFeatures = enum<Feature>(16); // or whatever the full flag value would be for Json + Xml + Html + Metadata, etc
EnabledFeatures=enum(16);//或者不管Json+Xml+Html+元数据的完整标志值是什么,等等
使用三重管道:

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

如果您有一组,您可以使用
reduce
,节省一些击键次数:

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

您已经得到了答案,但值得注意的是,这不是管道操作符,而是“按位或”。Craig Stuntz指出,F的按位or运算符是
| | |
。我认为它是
| | | | | |
…哦,等等,不,只有
| | |
@植物学家很高兴在这里见到你——这里有一些非常聪明的F人。还有我。@Daniel为了您的方便:
让我们内联(| ||||||||)a b=a b
:-)@TomasPetricek::-)谢谢。有没有可能实现这样的功能:
let inline flags>items=List.reduce(| | |)items
?可以,但这就是为什么我们首先要为标志和位组合运算符指定符号名的原因-因此我们不必这样做。谢谢您,先生!我想我错过了一些简单的东西,事实上我是。