Sintaks inisialisasi objek


99

Saya baru memulai dengan F # dan saya tidak dapat menemukan sintaks untuk melakukan inisialisasi objek seperti di C # 3.

Yaitu diberikan ini:

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

bagaimana cara menulis yang berikut di F #:

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

Jawaban:


137

Anda bisa melakukannya seperti ini:

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

Menurut konvensi, new hanya digunakan dengan kelas sekali pakai.
ShawnMartin

98

jawaban dari CMS pasti benar. Berikut ini hanya satu tambahan yang mungkin bisa membantu. Di F #, Anda sering ingin menulis tipe hanya menggunakan properti yang tidak dapat diubah. Saat menggunakan sintaks "object initializer", propertinya harus bisa berubah. Alternatif di F # adalah dengan menggunakan argumen bernama, yang memberi Anda sintaks yang serupa, tetapi menjaga semuanya tetap:

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

Sekarang kita bisa menulis:

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

Kode mengharuskan Anda untuk menentukan namanya, tetapi ulang tahun adalah argumen opsional dengan beberapa nilai default.


Terima kasih Tomas, tetapi dalam kasus saya, Orang ada di majelis lain dan saya tidak dapat mengubahnya :(
Mauricio Scheffer

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.