F#使用IDictionaryEnumerator

时间:2016-02-01 13:40:03

标签: f# c#-to-f#

所以我正在使用HttpRuntime.cache,它返回一个IDictionaryEnumerator作为其'枚举器,它似乎与List或Seq不兼容,所以我能找到使用它的唯一方法是下载到unholy命令式代码中,如下所示:

 member this.GetCountStartsWith keyPrefix =
            let enumerator = HttpRuntime.Cache.GetEnumerator()                 
            let mutable counter = 0
            while enumerator.MoveNext() do
                match enumerator.Key.ToString().StartsWith(keyPrefix) with
                | true -> counter <- counter + 1
                | false -> ()
            counter

我认为我可以创建一个帮助函数将其转储到List中,但是可能存在数千个元素,因此这对于性能明智而言是个坏主意。有什么办法以更惯用的方式处理这件事吗?

1 个答案:

答案 0 :(得分:2)

问题是你有IEnumerator,这不是通用的。但是,有两种方法可以解决这个问题:OfTypeCast

在实践中,您希望执行以下操作:

let enumerable = HttpRuntime.Cache |> Seq.cast<DictionaryEntry>

现在enumerable是一个正确的通用枚举:)