2008-12-16 19 views
79

Estoy empezando a cabo con F # y no puedo encontrar la sintaxis para hacer la inicialización de objetos como en C# 3.objeto sintaxis de inicialización

es decir, dado este:

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

¿Cómo se escribe lo siguiente en F #:

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

Respuesta

108

Usted puede hacerlo de esta manera:

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

la respuesta de CMS es definitivamente correcta. Aquí hay solo una adición que también puede ser útil. En F #, a menudo desea escribir el tipo simplemente usando propiedades inmutables. Al usar la sintaxis de "inicializador de objetos", las propiedades deben ser mutables. Una alternativa en Fa # es utilizar argumentos con nombre, que le da una sintaxis similar, pero mantiene las cosas inmutables:

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

Ahora podemos escribir:

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

El código requiere que se especifique el nombre, pero el cumpleaños es un argumento opcional con algún valor predeterminado.

+0

Gracias Tomas, pero en mi caso, la persona está en otra asamblea y no puedo cambiarla :( –

Cuestiones relacionadas