在F#中,我用
解析十进制字符串let foo str =
match Decimal.TryParse str with
| (true, result) -> Some result
| (false, _) -> None
使用当前系统文化来解析字符串。但实际上我想使用CultureInfo.InvariantCulture来解析字符串。这可以用上面的模式匹配方式完成吗?如果没有,最简洁的方法是什么?
答案 0 :(得分:4)
使用类似:
let foo str =
match System.Decimal.TryParse(str, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture) with
| (true, result) -> Some result
| (false, _) -> None
答案 1 :(得分:2)
您需要使用以NumberStyles
作为第二个参数的重载,并使用CultureInfo
作为第三个参数。由于这是一个.NET方法,因此参数是tupled(除了F#编译器将最后一个byref
参数转换为返回typle):
let foo str =
match Decimal.TryParse(str, NumberStyles.None, CultureInfo.InvariantCulture) with
| (true, result) -> Some result
| (false, _) -> None
方法的类型签名(如Visual Studio工具提示中所示)是:
Decimal.TryParse(s:string,style:NumberStyles,provider:IFormatProvider,result:byref< decimal>):bool
当使用带模式匹配的方法时,编译器将所有byref
参数从参数列表的末尾转换为返回元组的(最后)元素,但它将参数保留为元组,因此您有使用TryParse(foo, bar)
表示法调用该方法。
答案 2 :(得分:0)
使用TryParse方法的另一个重载
open System
open System.Globalization
let parse s =
match Decimal.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture) with
| true, v -> Some v
| false, _ -> None