为了能够为HashSet调用.ToArray ()
,我需要做什么?我尝试了以下但是没有用:
let a = System.Collections.Generic.HashSet ()
a.Add 5 |> ignore
a.ToArray () // Not possible
let b = a :> System.Collections.IEnumerable
b.ToArray () // Not possible
Here,陈述如下:
ToArray:从IEnumerable创建一个数组。 (由Enumerable定义。)
所以应该有办法。
答案 0 :(得分:6)
IEnumerable.ToArray()被定义为System.Linq下的扩展方法。 或者,使用Seq.toArray或Array.ofSeq。
open System.Collections.Generic
open System.Linq
let hs = HashSet()
hs.Add 4
hs.Add 2
let arr = hs.ToArray() // needs System.Linq
let arr2 = hs |> Seq.toArray // provided by F#
答案 1 :(得分:3)
HashSet
类型实现标准通用IEnumerable<'T>
类型(在F#中称为seq<'T>
),因此您可以使用Seq.toArray
(无需打开任何名称空间):
let hs = System.Collections.Generic.HashSet()
hs.Add(1)
let ar = hs |> Seq.toArray
使用C#扩展方法ToArray
也可以正常工作(如果你打开System.Linq
),但我相信使用标准的F#函数更为惯用。
答案 2 :(得分:0)
我相信它是一个扩展方法,所以你需要打开包含Enumerable(Linq?)的命名空间来获取它,就像在C#中一样。