所以我正在使用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中,但是可能存在数千个元素,因此这对于性能明智而言是个坏主意。有什么办法以更惯用的方式处理这件事吗?
答案 0 :(得分:2)
问题是你有IEnumerator
,这不是通用的。但是,有两种方法可以解决这个问题:OfType
和Cast
。
在实践中,您希望执行以下操作:
let enumerable = HttpRuntime.Cache |> Seq.cast<DictionaryEntry>
现在enumerable
是一个正确的通用枚举:)