Objektinitialisierungssyntax

99

Ich fange gerade mit F # an und kann die Syntax für die Objektinitialisierung wie in C # 3 nicht finden.

Dh gegeben dies:

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

Wie schreibe ich Folgendes in F #:

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

Antworten:

137

Sie können es so machen:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
CMS
quelle
Konventionell wird new nur mit Einwegklassen verwendet.
ShawnMartin
98

Die Antwort von CMS ist definitiv richtig. Hier ist nur eine Ergänzung, die ebenfalls hilfreich sein kann. In F # möchten Sie den Typ häufig nur mit unveränderlichen Eigenschaften schreiben. Bei Verwendung der Syntax "Objektinitialisierer" müssen die Eigenschaften veränderbar sein. Eine Alternative in F # ist die Verwendung benannter Argumente, die Ihnen eine ähnliche Syntax geben, aber die Dinge unveränderlich halten:

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

Jetzt können wir schreiben:

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

Für den Code müssen Sie den Namen angeben, aber Geburtstag ist ein optionales Argument mit einem Standardwert.

Tomas Petricek
quelle
Danke Tomas, aber in meinem Fall ist Person in einer anderen Versammlung und ich kann es nicht ändern :(
Mauricio Scheffer