Sintaxis de inicialización de objetos


99

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

Es decir, dado esto:

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

¿cómo escribo lo siguiente en F #:

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

Respuestas:


137

Puedes hacerlo así:

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

Por convención, new solo se usa con clases desechables.
ShawnMartin

98

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. Cuando se utiliza la sintaxis de "inicializador de objeto", las propiedades deben ser mutables. Una alternativa en F # es usar argumentos con nombre, lo que le brinda 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 especifiques el nombre, pero cumpleaños es un argumento opcional con algún valor predeterminado.


Gracias Tomas, pero en mi caso Person está en otra asamblea y no puedo cambiarlo :(
Mauricio Scheffer

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.