Синтаксис инициализации объекта - PullRequest
94 голосов
/ 16 декабря 2008

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

127 голосов
/ 16 декабря 2008

Вы можете сделать это так:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
96 голосов
/ 16 декабря 2008

ответ от 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")

Код требует, чтобы вы указали имя, но день рождения - это необязательный аргумент с некоторым значением по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...