【发布时间】:2017-09-29 13:31:38
【问题描述】:
我在另一个 C# 项目中使用我的 F# 类库。我调用的函数返回一个像这样的对象:
type Item =
{ Title: string
Items: List<Item ref> }
问题是我在 C# 中使用它时,Items 属性的类型是 List<FSharpRef<Item>>。
所以问题是:
如何在不丢失对象引用的情况下将其转换为 List<Item>(在 F# 中)?
即如果两个 Item 对象在其列表中引用了第三个对象,则它们应该在 C# 中引用同一个对象。
【问题讨论】:
-
解释一下为什么首先在 F# 代码中使用
refs 可能会对您有所帮助。 -
@kvb 基本上,“Item”类型具有单向图的结构,其中两个或多个节点可能指向同一个节点。
-
但是你不需要 ref ......从 .NET 类型系统的角度来看,项目已经是引用类型。
-
@kvb 这是一个好点!但是,这只有在对象不可变时才有效,对吧?
-
这取决于你想要改变什么;您可以将字段标记为
mutable以改变它们,但这与您现在拥有的不同(现在您可以更改Items列表的各个元素,但不能更改列表的长度)。