Синтаксис об'єкта ініціалізації


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 };

Відповіді:


137

Ви можете зробити це так:

let p = new Person (Name = "John", BirthDate = DateTime.Now)

За умовою нове застосовується лише для одноразових класів.
ShawnMartin

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")

Код вимагає вказати ім’я, але день народження - необов'язковий аргумент з деяким значенням за замовчуванням.


Дякую Томашу, але в моєму випадку Особа перебуває в іншій асамблеї, і я не можу її змінити :(
Маурісіо Шеффер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.