2011-12-21 12 views
7

Mam następujące rodzaje:Korzystanie F # Opcja Wpisz w 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 

gdzie rekurencyjny "info lista" jest opcją. Albo jest jeden, albo nie ma żadnego. Muszę użyć tego z C#, ale dostaję błędy. To jest użycie próbki:

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

tutaj listInfo jest typu ListInfo jak wyżej. Próbuję tylko sprawdzić, czy zawiera wartość, a jeśli tak, to chcę z niej skorzystać. Ale wszystkie informacje dostępowe listInfo.LInfo zawiera błąd "Własność, indeksowanie lub lista zdarzeńInfo.LInfo nie jest obsługiwane przez język ..."

Ktoś, kto rozumie, dlaczego?

+0

Nie sądzę, problem nie ma nic wspólnego z typem opcji ... Wygląda na to właściwości zadeklarowanej w F # nie jest rozpoznawany przez C# –

Odpowiedz

3

Podejrzewam, że problem polega na tym, że narzędzie getter/setter właściwości LInfo działa z różnymi typami (co nie jest obsługiwane w języku C#).

Spróbuj

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

Albo ten

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

Dzięki, pierwsze rozwiązanie działało dobrze, więc poszedłem z tym. – UmaN

+3

Nie chodzi tylko o to, że nie jest obsługiwany przez C# - Nie sądzę, że ma być obsługiwany w F # albo ... – kvb

+7

@kvb: Masz rację: Z sekcji 8.13.1 specyfikacji: _Jeśli członek właściwości ma zarówno pobierający, jak i ustawiający, i żaden nie jest indeksatorem, wtedy podpisy zarówno pobierającego, jak i ustawiającego muszą sugerować ten sam typ właściwości. – Daniel