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 };

Antworten:


137

Sie können es so machen:

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

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.