c# - 如何以干净的方式将运算符作为参数传递?

标签 c#

我想以一种很好的方式在 double 上传递 <= 运算符

例如

 var a = new double[] { 1.0, 2.0, 3.0 };
 var b = new double[] { 5.0, 1.0, 3.0 };

例如,我可以使用 Math.Max 函数执行此操作:

var c = a.Zip(b, Math.Max);

但是对于 double 上的 <= 运算符,我必须这样写:

var c2 = a.Zip(b, (double x, double y)=> (x<=y));

与 Math.Max 形式相比很难看。

有没有办法用以下干净的方式之一来写这个:

1 - var c2 = a.Zip(b, (double operator <=));
2 - var c2 = a.Zip(b, Double.LessOrEqualTo);

?

谢谢, J.

最佳答案

在不使用其他方法的情况下,您可以获得的最短的是:

var c2 = a.Zip(b, (x, y) => x <= y);

编译器将从ab 类型中为您扣除xy 的类型。

如果你不喜欢,你可以声明辅助方法:

public static class DoubleExtensions
{
    public static bool LessOrEqual(this double first, double second)
    {
        return first <= second;
    }
}

并使用它:

var c = a.Zip(b, DoubleExtensions.LessOrEqual);

关于c# - 如何以干净的方式将运算符作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835090/

相关文章:

c# - Linq 分组选择

c# - 如何为 LINQ 查询构建动态 FROM 子句?

c# - 无法从 Visual Studio 2017 调试和发布 Azure Function

c# - 无法从另一个类访问列表

c# - Visual C# - 可以记住用户输入的简单程序?

c# - 为什么Angular的请求头修改会抛出option 401错误

c# - XNA:当前顶点声明不包括当前顶点着色器所需的所有元素。 Normal0 丢失

java - 在java中验证C#中的rsa签名

c# - 如何将单元格样式应用于 DataGrid 单元格

c# - 如何使用 Moq 传递列表参数