Sintassi di inizializzazione degli oggetti


99

Sto appena iniziando con F # e non riesco a trovare la sintassi per eseguire l'inizializzazione degli oggetti come in C # 3.

Vale a dire questo:

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

come scrivo quanto segue in F #:

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

Risposte:


137

Puoi farlo in questo modo:

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

Per convenzione new viene utilizzato solo con classi usa e getta.
ShawnMartin

98

la risposta di CMS è decisamente corretta. Ecco solo un'aggiunta che potrebbe essere utile. In F #, spesso si vuole scrivere il tipo usando solo proprietà non modificabili. Quando si utilizza la sintassi "inizializzatore oggetto", le proprietà devono essere modificabili. Un'alternativa in F # consiste nell'usare argomenti con nome, che fornisce una sintassi simile, ma mantiene le cose immutabili:

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

Adesso possiamo scrivere:

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

Il codice richiede di specificare il nome, ma il compleanno è un argomento facoltativo con un valore predefinito.


Grazie Tomas, ma nel mio caso la persona è in un'altra assemblea e non posso cambiarla :(
Mauricio Scheffer

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.