web-dev-qa-db-fra.com

Syntaxe d'initialisation d'objet

Je commence juste avec F # et je ne trouve pas la syntaxe pour faire l'initialisation d'objet comme dans C # 3.

C'est à dire. étant donné ceci:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

comment puis-je écrire ce qui suit en F #:

var p = new Person { Name = "John", BirthDate = DateTime.Now };
97
Mauricio Scheffer

Vous pouvez le faire comme ceci:

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

la réponse de CMS est définitivement correcte. Voici juste un ajout qui peut également être utile. En F #, vous voulez souvent écrire le type en utilisant simplement des propriétés immuables. Lorsque vous utilisez la syntaxe "initialiseur d'objet", les propriétés doivent être modifiables. Une alternative en F # est d'utiliser des arguments nommés, ce qui vous donne une syntaxe similaire, mais garde les choses immuables:

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue

Maintenant, nous pouvons écrire:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

Le code vous oblige à spécifier le nom, mais anniversaire est un argument facultatif avec une valeur par défaut.

96
Tomas Petricek

Vous pouvez également omettre le mot clé new et utiliser une syntaxe moins verbeuse:

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

https://docs.Microsoft.com/en-us/dotnet/fsharp/language-reference/members/constructors

2
Vladimir Efimenko