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


99

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

Ответы:



98

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

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


Спасибо, Томас, но в моем случае Person находится в другой сборке, и я не могу его изменить :(
Маурисио Шеффер

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.