TryParse字符串为有效模式

Tor*_*sen 5 f#

您好,我目前正在尝试使用活动的模式和Int.TryParse方法将字符串解析为Int。使用2012年的旧示例,它以前的工作方式如下:

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

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

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

错误:

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

Tor*_*sen 7

在 Reddit上Jestar342的帮助下发现了我自己的错误:

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

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


psf*_*aki 5

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

就像是...

let tryParseInt s = 
    try 
        s |> int |> Some
    with :? FormatException -> 
        None
Run Code Online (Sandbox Code Playgroud)