我在github上看到F#核心库有一组重写的LINQ方法。这是什么原因?为什么它们与C#方法不同?
我不确定与此有什么意见,但也许是为什么它们重复以及为什么它们略有不同的问题应该分开。一个例子是使用take
方法:在C#中,调用4个元素序列中的5个元素将返回该4个元素的序列,而在F#中它将引发异常。
答案 0 :(得分:9)
Seq
模块包含与LINQ类似的功能有几个原因:
F#首先使用它: - )在将LINQ添加到C#之前很久就存在F#中的Seq
模块。我猜C#团队可能已经决定只使用Seq
模块作为LINQ的实现,但不难看出为什么没有发生......
C#使用扩展方法,而F#使用函数 - 原则上,F#函数被编译为静态方法,因此不可能想象它们可以被标记为可访问的扩展方法来自C# - 但这并不简单。
F#函数是curry - 这很棘手 - 在C#中,this IEnumerable<T>
参数通常是第一个,而在F#中它是最后一个(允许部分)功能应用)
F#函数采用FSharpFunc
或Func
- 另一个技术差异 - F#函数编译方式不同(出于性能原因)
命名也不同。对于F#,这对于保持部分OCaml兼容性非常重要。