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

2023-12-24

我有以下类型:

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# 中不支持)。

Try this

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

Or this

member this.LInfo
    with get() = match lInfo with Some x -> x | None -> Unchecked.defaultof<_>
    and set value = lInfo <- Some value
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中使用 F# 选项类型 的相关文章

随机推荐