Syntaxe d'initialisation d'objet


99

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

Ie étant donné ceci:

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

comment écrire ce qui suit en F #:

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

Réponses:


137

Vous pouvez le faire comme ceci:

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

Par convention, new n'est utilisé qu'avec les classes jetables.
ShawnMartin

98

la réponse du CMS est tout à fait correcte. Voici juste un ajout qui peut également être utile. En F #, vous souhaitez souvent écrire le type en utilisant simplement des propriétés immuables. Lors de l'utilisation de la syntaxe "object initializer", 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 l'anniversaire est un argument facultatif avec une valeur par défaut.


Merci Tomas, mais dans mon cas Person est dans une autre assemblée et je ne peux pas la changer :(
Mauricio Scheffer

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.