Skip to main content
 首页 » 编程设计

F# 选项相当于 C# 的 运算符(operator)

2025年02月15日29yjmyzz

我正在寻找一种方法来获取 F# 选项的值,或者如果它是 None 则使用默认值。
这似乎很常见,我不敢相信预定义的东西不存在。这是我现在的做法:

// val getOptionValue : Lazy<'a> -> Option<'a> -> 'a     
let getOptionValue (defaultValue : Lazy<_>) = function Some value -> value | None -> defaultValue.Force () 

我(有点)在寻找相当于 C# 的 F# ?运算符(operator):
string test = GetString() ?? "This will be used if the result of GetString() is null."; 

Option 模块中没有任何功能可以完成我认为非常基本的任务。我错过了什么?

请您参考如下方法:

您可以轻松创建自己的运算符(operator)来做同样的事情。

let (|?) = defaultArg 

您的 C# 示例将变为
let getString() = (None:string option)  
let test = getString() |? "This will be used if the result of getString() is None.";; 
 
val getString : unit -> string option  
val test : string = "This will be used if the result of getString() is None." 

Here's a blog post更详细一点。

编辑:尼康三世为运算符(operator)提供了更好的实现,所以我更新了它。