request
来自HttpRequestMessage
的{{1}},我尝试使用模式匹配来确定用于发出请求的方法。
这是一个人为的例子,它证明了我的问题:
System.Net.Http
导致:
分析程序错误:字段,构造函数或成员'获取'未定义
为什么这不起作用,我如何使用模式匹配或更合适的技术来实现相同的目标?
答案 0 :(得分:6)
正如John Palmer在评论中指出的那样,你可以这样写:
let m =
match request.Method with
| x when x = HttpMethod.Get -> "GET"
| x when x = HttpMethod.Post -> "POST"
| _ -> ""
但是,如果你要重复这样做,你可能会发现这有点麻烦,在这种情况下你可以为它定义一些Active Patterns:
let (|GET|_|) x =
if x = HttpMethod.Get
then Some x
else None
let (|POST|_|) x =
if x = HttpMethod.Post
then Some x
else None
这可以让你写这个:
let m =
match request.Method with
| GET _ -> "GET"
| POST _ -> "POST"
| _ -> ""
答案 1 :(得分:1)
另一种使用活动模式的方法最终会得到比Mark解决方案更好的代码,这是一种模式函数(使用完整分类模式):
let (|GET|POST|PUT|DELETE|OTHER|) x =
if x = HttpMethod.Get
then GET
elif x = HttpMethod.Post
then POST
elif x = HttpMethod.Put
then PUT
elif x = HttpMethod.Delete
then DELETE
else OTHER
这种方法可让您摆脱模式匹配中的下划线:
let m =
match request.Method with
| GET -> "GET"
| POST -> "POST"
| _ -> ""