为什么.NET LINQ方法在F#核心库中重写?

Nic*_*ckL 0 c# linq f#

我在github上看到F#核心库有一组重写的LINQ方法.这是什么原因?为什么它们与C#方法不同?

编辑

我不确定与此有什么意见,但也许是为什么它们重复以及为什么它们略有不同的问题应该分开.一个例子是使用以下take方法:在C#中,调用4个元素序列中的5个元素将返回该4个元素的序列,而在F#中,它将引发异常.

Tom*_*cek 9

Seq模块包含与LINQ类似的功能有几个原因:

  • F#首先使用它:-)Seq F#中的模块在LINQ添加到C#之前很久就存在了.我猜C#团队可能已经决定只使用该Seq模块作为LINQ的实现,但不难看出为什么没有发生......

  • C#使用扩展方法,而F#使用函数 - 原则上,F#函数被编译为静态方法,因此不可能想象它们可以被标记为可从C#访问的扩展方法 - 但这并不简单.

  • F#函数是curry - 这很棘手 - 在C#中,this IEnumerable<T>参数通常是第一个,而在F#中它是最后一个(允许部分函数应用)

  • F#函数采用FSharpFuncFunc - 另一个技术差异 - F#函数编译方式不同(出于性能原因)

  • 命名也不同.对于F#,这对于保持部分OCaml兼容性很重要.