2008-12-16 80 views
79

Tôi chỉ mới bắt đầu với F # và tôi không thể tìm thấy cú pháp để khởi tạo đối tượng như trong C# 3.Cú pháp khởi tạo đối tượng

I.e. cho này:

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

làm thế nào để tôi viết sau đây trong F #:

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

Trả lời

108

Bạn có thể làm điều đó như thế này:

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

câu trả lời từ CMS là chắc chắn đúng. Đây chỉ là một bổ sung có thể cũng hữu ích. Trong F #, bạn thường muốn viết kiểu chỉ bằng các thuộc tính bất biến. Khi sử dụng cú pháp "initializer object", các thuộc tính phải được thay đổi. Một thay thế trong F # là để sử dụng tên đối số, mang đến cho bạn một cú pháp tương tự, nhưng giữ những điều bất di bất dịch:

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

Bây giờ chúng ta có thể viết:

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

Mã này đòi hỏi bạn phải ghi rõ tên, nhưng sinh nhật là một đối số tùy chọn với một số giá trị mặc định.

+0

Cảm ơn Tomas, nhưng trong trường hợp của tôi, Người đang ở trong một hội đồng khác và tôi không thể thay đổi nó :( –

Các vấn đề liên quan