Синтаксис инициализации объекта

Я только начинаю с 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

Другие вопросы по тегам