.NET Framework在4.0版本中添加了ISet<T>接口(interface)。在同一发行版中,F#被添加为一流的语言。 F#提供了一个不变的Set<'T>类。

在我看来,提供的不可变集将实现ISet<T>接口(interface)似乎是合乎逻辑的,但事实并非如此。有人知道为什么吗?

我的猜测是他们不想实现旨在实现可变的接口(interface),但我认为这种解释无法成立。毕竟,他们的Map<'Key, 'Value>类实现了可变的IDictionary。在类框架的其他地方,实现接口(interface)的示例仅部分适用。

我的另一个想法是ISet<T>是新的,因此也许他们没有解决。但这似乎很渺茫。
ISet<T>是泛型的事实(而不是IDictionary)与它有关系吗?

任何对此事的想法将不胜感激。

最佳答案

副手我不认为我以前知道ISet。 (实际上,我回过头来查看旧电子邮件,发现其中提到了BCL计划-从2008年开始-就是这样。所以我认为它不在我们的关注范围内。)

也就是说,F#努力使其.NET 2.0和.NET 4.0位之间源兼容,以至于将.NET 4.0实体反向移植到FSharp.Core.dll 2.0版中。例如,2.0 FSharp.Core包含System.TupleSystem.BigIntegerSystem.Threading.CancelationTokenSource(异步编程模型的一部分)等,而ISet可能是回移植的另一项工作(我不清楚这是否是“必需的”)。 ',以将其移植)。

我会提出一个问题,尽管目前看来尚无定论。

10-08 11:56