使用默认值创建记录实例

dem*_*mas 5 f#

我有一个记录类型:

type Person = 
   {
       Name : string
       Age : int
   }
Run Code Online (Sandbox Code Playgroud)

我需要一个函数,它使用默认(在C#视点中)字段返回此记录的新实例.

我可以这样做:

let f = 
  {
     Name = ""
     Age = 0
  }
Run Code Online (Sandbox Code Playgroud)

但我想避免所有字段枚举,并使用这样的东西:

let f = new Person
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

小智 11

F#允许向记录和区分联合添加方法/属性:

type Person =
{
    Name: string
    Age: int
}
with
    static member Default = { Name = ""; Age = 0 }
Run Code Online (Sandbox Code Playgroud)

在FSI:

 > Person.Default;;
    val it : Person = {Name = "";
                       Age = 0;}
Run Code Online (Sandbox Code Playgroud)


Joh*_*mer 4

用过的Unchecked.defaultof<'t>。但请注意,F# 记录是不可变的,因此这可能不是您想要的。

  • 我认为这里可能存在一些 XY 问题。您确实不想在记录可能为空的情况下使用记录,因为它们是不可变的 (2认同)