好的,所以对于大多数 LINQ 操作来说,都有一个 F# 等价物。(一般在 Seq 模块中,因为 Seq= IEnumerable)
我找不到 的等价物IEmumerable.Single
,我更喜欢Single
(First
它是 Seq.find),因为它更具防御性 - 它对我来说断言状态是我所期望的。
所以我看到了几个解决方案(除了使用 Seq.find 之外)。(这些可以写成扩展方法)
我只调用这个函数的类型签名是
('a->bool) -> seq<'a> -> 'a
let only = fun predicate src -> System.Linq.Enumerable.Single<'a>(src, predicate)
let only2 = Seq.filter >> Seq.exactlyOne
only2
是首选,但它不会编译(有任何线索吗?)。