2011-12-21 5 views
7

tôi có các loại sau đây:Sử dụng F # Lựa chọn Gõ vào C#

and ListInfo() = 

let mutable count = 0 

// This is a mutable option because we can't have an infinite data structure. 
let mutable lInfo : Option<ListInfo> = None 

let dInfo = new DictInfo() 
let bInfo = new BaseInfo() 

member this.BaseInfo = bInfo 
member this.DictInfo = dInfo 

member this.LInfo 
    with get() = lInfo 
    and set(value) = lInfo <- Some(value) 

member this.Count 
    with get() = count 
    and set(value) = count <- value 

nơi đệ quy "thông tin danh sách" là một lựa chọn. Hoặc là có một hoặc không có. Tôi cần phải sử dụng này từ C# nhưng tôi nhận được lỗi. Đây là cách sử dụng mẫu:

if (FSharpOption<Types.ListInfo>.get_IsSome(listInfo.LInfo)) 
{ 
    Types.ListInfo subListInfo = listInfo.LInfo.Value; 
    HandleListInfo(subListInfo, n); 
} 

đây listInfo là loại ListInfo như trên. Tôi chỉ cố gắng kiểm tra xem nó có chứa một giá trị không và nếu tôi muốn sử dụng nó. Nhưng tất cả các accessIn listInfo.LInfo cho lỗi "Property, indexer hoặc eventInfo.LInfo không được hỗ trợ bởi ngôn ngữ ..."

Bất cứ ai hiểu tại sao?

+0

Tôi không nghĩ rằng vấn đề có bất cứ điều gì để làm với các loại Tùy chọn ... Nó trông giống như một tài sản đã kê khai trong F # không được công nhận bởi C# –

Trả lời

3

Tôi nghi ngờ vấn đề là thuộc tính getter/setter thuộc tính LInfo hoạt động với các loại khác nhau (không được hỗ trợ trong C#).

Hãy thử điều này

member this.LInfo 
    with get() = lInfo 
    and set value = lInfo <- value 

Hoặc này

member this.LInfo 
    with get() = match lInfo with Some x -> x | None -> Unchecked.defaultof<_> 
    and set value = lInfo <- Some value 
+0

Cảm ơn, giải pháp đầu tiên hoạt động tốt nên tôi đã đi với điều đó. – UmaN

+3

Nó không chỉ là nó không được hỗ trợ bởi C# - Tôi không nghĩ rằng nó phải được hỗ trợ trong F # ... – kvb

+7

@kvb: Bạn nói đúng: Từ phần 8.13.1 của thông số: _Nếu một thành viên bất động sản có cả getter và setter, và cả hai đều không là chỉ mục, thì chữ ký của cả getter và setter phải ngụ ý cùng loại thuộc tính._ – Daniel