Синтаксис инициализации объекта
Я только начинаю с 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 };
2 ответа
Вы можете сделать это так:
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://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/members/constructors