103

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

即给出这个:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

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

var p = new Person { Name = "John", BirthDate = DateTime.Now };
4

3 回答 3

144

你可以这样做:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
于 2008-12-16T16:54:43.447 回答
99

CMS的答案绝对正确。这只是一个可能也有帮助的补充。在 F# 中,您通常希望仅使用不可变属性来编写类型。当使用“对象初始化器”语法时,属性必须是可变的。F# 中的另一种选择是使用命名参数,它为您提供类似的语法,但保持不变:

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

现在我们可以写:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

该代码要求您指定名称,但生日是一个带有一些默认值的可选参数。

于 2008-12-16T18:19:41.217 回答
2

您还可以省略new关键字并使用不太冗长的语法:

let p = Person(BirthDate = DateTime.Now, Name = "John")

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

于 2019-09-10T08:06:01.500 回答