在使用 C# 与 F# 混合编程的时候(通常是使用 C# 实现 GUI,F#负责数据处理),经常会遇到要判断一个 option 是 None 还是 Some。虽然 Option module 里有 isSome 这样的函数,但还是不够方便。偶然在墙外看到一个解决方法:
[<System.Runtime.CompilerServices.Extension>] module Methods = [<System.Runtime.CompilerServices.Extension>] let Exists(opt : ‘a option) = match opt with | Some _ -> true | None -> false
一般是把函数放在需要的引入的那个 module 里,这样就不用单独引用一个 module 了。不过这也取决于怎么组织项目。
然后就可以在 C# 里这样用了:
if (aOptionVariable.Exists()) { ... }
记得使用前 using 上面那个 module