对象初始化语法


99

我只是从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 };

Answers:



98

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")

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


谢谢托马斯,但是在我的情况下,人在另一个议会中,所以我不能更改它:(
莫里西奥·谢弗

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.