我只是从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 };
Answers:
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是带有一些默认值的可选参数。
您也可以省略new
关键字,并使用较少的冗长语法:
let p = Person(BirthDate = DateTime.Now, Name = "John")
https://docs.microsoft.com/zh-cn/dotnet/fsharp/language-reference/members/constructors