对象初始化语法

Mau*_*fer 95 syntax f# object-initializers

我刚刚开始使用F#,我找不到像C#3那样进行对象初始化的语法.

即这样:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何在F#中编写以下内容:

var p = new Person { Name = "John", BirthDate = DateTime.Now };
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 130

你可以这样做:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
Run Code Online (Sandbox Code Playgroud)

  • 按照惯例,**new** 仅与一次性类一起使用。 (3认同)

Tom*_*cek 96

CMS的答案肯定是正确的.这只是一个可能也有帮助的补充.在F#中,您经常要使用不可变属性来编写类型.使用"对象初始化程序"语法时,属性必须是可变的.F#中的另一种选择是使用命名参数,它为您提供类似的语法,但保持不可变:

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue
Run Code Online (Sandbox Code Playgroud)

现在我们可以写:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")
Run Code Online (Sandbox Code Playgroud)

代码要求您指定名称,但birthday是具有某个默认值的可选参数.


小智 6

您还可以省略new关键字并使用更简洁的语法:

let p = Person(BirthDate = DateTime.Now, Name = "John")
Run Code Online (Sandbox Code Playgroud)

https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/members/constructors