Использование опции типа F # в C # - PullRequest
7 голосов
/ 21 декабря 2011

У меня есть следующий тип:

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

, где рекурсивная «информация о списке» является опцией.Либо есть, либо его нет.Мне нужно использовать это из C #, но я получаю ошибки.Это пример использования:

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

здесь listInfo имеет тип ListInfo, как указано выше.Я просто пытаюсь проверить, содержит ли оно значение, и если да, то хочу его использовать.Но все обращения к listInfo.LInfo выдают ошибку «Свойство, индексатор или событие listInfo.LInfo не поддерживается языком ...»

Любой, кто понимает, почему?

1 Ответ

3 голосов
/ 21 декабря 2011

Я подозреваю, что проблема заключается в том, что LInfo свойство getter / setter работает с разными типами (что не поддерживается в C #).

Попробуйте это

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

Или это

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