我有以下几种
type StatusCode =
| OK = 200
| NoContent = 204
| MovedTemp = 301
| MovedPerm = 302
| SeeOther = 303
| NotModified = 304
| NotFound = 404
| ServerError = 500
[<Literal>]
let NoBodyAllowedStatusCodes = [StatusCode.NoContent; StatusCode.NotModified]
而且我收到一个编译时错误,提示:
这不是有效的常量表达式或自定义属性值
我真的无法弄清楚这里出了什么问题。
在F#和.NET中,列表不能是文字(在C#/ VB.NET中是常数)。只有基本值可以,例如string
,bool
等等。F#3.0规范在10.2.2节中提供了关于可以或不能为文字的指导原则:
具有文字属性的值受到以下限制:
- 它可能未标记为可变或内联。
- 它可能也没有ThreadStatic或ContextStatic属性。
- 右侧表达式必须是由以下任意一个组成的文字常量表达式:
- 一个简单的常量表达式,除了(),本地整数文字,无符号本地整数文字,字节数组文字,BigInteger文字和用户定义的数字文字外。
-要么-
- 对另一个文字的引用。
如果let
要在类中使用绑定,则可以根据您要执行的操作将列表设为静态。如果在模块中,我将删除该Literal
属性,因为默认情况下,let绑定是不可变的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句