对象初始化语法

114

我刚开始使用 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 };
3个回答

154

你可以这样做:

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

3
按照惯例,"new" 关键字仅用于可丢弃的类。 - ShawnMartin

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

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


谢谢Tomas,但在我的情况下,Person在另一个程序集中,我无法更改它 :( - Mauricio Scheffer

5

新的语法在 F# 中看起来更好。 - Avestura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接