gpt4 book ai didi

f# - 在 IEnumerable 上使用 Seq 函数

转载 作者:行者123 更新时间:2023-12-03 12:08:36 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do I deal with IEnumerable in F#?

(1 个回答)


8年前关闭。




我正在尝试在 IEnumerable 上应用 Seq 函数。更具体地说,它是 System.Windows.Forms.HtmlElementCollection实现ICollectionIEnumerable .

由于 F# seq是一个 IEnumerable,我想我可以写

let foo = myHtmlElementCollection |> Seq.find (fun i -> i.Name = "foo")

但编译器将一无所有,并提示“'HtmlElementCollection' 类型与'seq<'a>' 类型不兼容”。

但是,编译器愿意接受 for .. in .. 中的 IEnumerable。序列表达式:
let foo = seq { for i in myHtmlElementCollection -> i } |> Seq.find (fun i -> i.Name = "foo")

我需要做什么才能像对待任何旧 F# seq 一样对待 IEnumerable ?

注意:这个问题被标记为重复,但事实并非如此。链接的“重复”是关于无类型序列(来自 seq { for ... } 表达式的序列),而我的问题是关于类型序列。

最佳答案

F#的类型seq<'a>等价于通用 IEnumerable<'a> System.Collections.Generic ,但不适用于非泛型 IEnumerable .您可以使用 Seq.cast<'a> 从非泛型转换为泛型的函数:

let foo = myHtmlElementCollection
|> Seq.cast<HtmlElement>
|> Seq.find (fun i -> i.Name = "foo")

关于f# - 在 IEnumerable 上使用 Seq 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com