我刚开始使用 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 };
我刚开始使用 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 };
你可以这样做:
let p = new Person (Name = "John", BirthDate = DateTime.Now)
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")
这段代码要求您指定名称,但生日是一个有一些默认值的可选参数。
new
关键字,使用更简洁的语法:let p = Person(BirthDate = DateTime.Now, Name = "John")
https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/members/constructors