在C#中使用F#选项类型

我有以下类型:

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不受语言支持......”

任何明白为什么?


我怀疑问题是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
链接地址: http://www.djcxy.com/p/10253.html

上一篇: Using F# Option Type in C#

下一篇: MVC 4 razor model with multiple angle brackets issue