将加法函数从F#导入C#

将加法函数从F#导入C#,c#,f#,C#,F#,我最近了解到,您可以将函数从导入到C#,例如 var max=new List(){1,2,3}.Aggregate(int.MinValue,Operators.max); 是否有可供添加的等效函数?我好像找不到。能够写作会很酷 var sum = new List<int>() { 1, 2, 3 }.Aggregate(0, Operators.Add); var sum=newlist(){1,2,3}.Aggregate(0,Operators.Add); 在操作符中

我最近了解到,您可以将函数从导入到C#,例如

var max=new List(){1,2,3}.Aggregate(int.MinValue,Operators.max);
是否有可供添加的等效函数?我好像找不到。能够写作会很酷

var sum = new List<int>() { 1, 2, 3 }.Aggregate(0, Operators.Add);
var sum=newlist(){1,2,3}.Aggregate(0,Operators.Add);

操作符中有一个加法操作符

您可以使用以下方法从C#消费它:

var sum = new List<int>() { 1, 2, 3 }.Aggregate(0, Operators.op_Addition<int, int, int>);
var sum=newlist(){1,2,3}.Aggregate(0,Operators.op_Addition);

是什么阻止您使用lambda表达式
var sum=new List(){1,2,3}.Aggregate(0,(x,y)=>x+y)
如果您需要导入F#Core库,只是因为您想使用包装
+
运算符的F#函数,那么我认为这有点过分。(代码示例中的所有其他内容都是标准的.NET+LINQ。)为什么要这样做?我很清楚您可以创建匿名函数。但我发现,如果我只传递一个函数,它会更具声明性。当写(x,y)=x+y时,我需要给x’和‘y’加上名字,读代码的人必须考虑这些名字的意思。在编写聚合(0,Add)之类的内容时,可以立即清楚地知道发生了什么,而不会分散变量的注意力。不过我必须承认,op_的添加比我希望的要长一点。我可以自己编写这样一个函数Util.Add,但它确实有点偏离了使用标准库的清晰性。。。您当然可以选择无点样式。并通过传入(+)作为函数来删除变量,至少在fsharp中是这样。(这基本上是一个
折叠
,但C#的LINQ有时可能是一个糟糕的抽象)。我假设您还有一些其他类似的函数,因为否则您只需要
.Sum
它?(忘了C#是否有这个非常基本的扩展函数)我希望我永远不会在生产代码中看到这一点:D
var sum = new List<int>() { 1, 2, 3 }.Aggregate(0, Operators.Add);
var sum = new List<int>() { 1, 2, 3 }.Aggregate(0, Operators.op_Addition<int, int, int>);