您好,我目前正在尝试使用活动的模式和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 ):布尔值
答案 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)