f# - 记录可以有一个可为空的字段吗?

标签 f#

记录具有可空字段是否合法,例如:

type MyRec = { startDate : System.Nullable<DateTime>; }

这个例子确实构建在我的项目中,但是如果它合法,这是一个好的做法吗,如果有的话会带来什么问题?

最佳答案

这是合法的,但 F# 鼓励使用选项类型:

type MyRec = { startDate : option<DateTime>; }

通过使用选项,您可以轻松地对选项和其他操作进行模式匹配,以将选项值转换为例如映射值(通过使用 Option.map )和诸如 Maybe monad(通过使用 Option.bind )之类的抽象,而使用 nullable 你不能因为只有值类型可以为可空值。

您会注意到大多数 F# 函数(例如 List.choose )使用选项而不是可空值。 optional parameters 等一些语言功能被解释为 F# 选项类型。

但是在某些情况下,当您需要与 C# 交互时,您可能希望使用 Nullable。

当使用 Linq 查询数据库时,您可以考虑使用 Linq.Nullable ModuleNullable operators

关于f# - 记录可以有一个可为空的字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23465440/

相关文章:

visual-studio - Visual Studio F# 交互窗口由哪个进程托管?

c# - F# 中的度量单位 "Type"

generics - 使用 F# 的静态类型参数和编码数字常量

count - 序列计数元素数

unit-testing - 在 VSCode 中向 F# 项目添加单元测试

c# - F#:如何将处理程序中的函数设置为 "await",以便异常仍然冒泡到处理程序?

F# "exit early"计算表达式?

f# - F# 集的覆盖比较

f# - 为什么我可以把 |> 放在下一行但是 <|给出语法错误?

f# - Visual Studio Express 2013 RC 是否支持 F#?