TryParse字符串为有效模式

时间:2018-10-24 21:48:53

标签: f#

您好,我目前正在尝试使用活动的模式和Int.TryParse方法将字符串解析为Int。使用2012年的旧示例,它过去通常是这样的:

let (|Int|_|) str =
    match System.Int32.TryParse str with
    | true,int -> Some int
    | _ -> None

但是现在我收到一个错误消息,告诉我无法选择TryParse()的正确重载。将str注释为字符串,错误仍然存​​在。我希望你们中的任何一个可以帮助我解决这个简单的问题,在此先感谢。

一些其他信息:我正在使用FSharp.Core 4.5.2和.Net Core 2.1进行尝试。

错误:

  

FS0041无法确定方法“ TryParse”的唯一重载   基于此程序点之前的类型信息。一种   可能需要注释。候选人:Int32.TryParse(s:   ReadOnlySpan ,结果:byref ):bool,Int32.TryParse(s:   字符串,结果:byref ):布尔值

3 个答案:

答案 0 :(得分:4)

在{d3}的帮助下,在Reddit上发现了我自己的错误:

let (|Int|_|) (str:string) =
    match System.Int32.TryParse str with
    | true,int -> Some int
    | _ -> None

将str更改为(str:string)可修复此错误。

答案 1 :(得分:2)

Span类型是最近引入到.Net中的。

这是类型推断和函数重载的一个缺点:它可能破坏现有代码。类型注释是解决方案。

答案 2 :(得分:1)

还考虑使用更惯用的F#内置int函数。

类似...

let tryParseInt s = 
    try 
        s |> int |> Some
    with :? FormatException -> 
        None