2008-12-16 2 views
79

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

I.e. étant donné ceci:

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

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

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

Répondre

108

Vous pouvez le faire comme ceci:

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

la réponse de la CMS est certainement correcte. Voici juste un ajout qui peut être utile. En F #, vous voulez souvent écrire le type en utilisant simplement les propriétés immuables. Lorsque vous utilisez la syntaxe "object initializer", les propriétés doivent être modifiables. Une alternative à F # est d'utiliser les arguments nommés, ce qui vous donne une syntaxe similaire, mais conserve des 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 à indiquer le nom, mais l'anniversaire est un argument facultatif avec une valeur par défaut.

+0

Merci Tomas, mais dans mon cas, la personne est dans un autre assemblage et je ne peux pas le changer :( –