数组的基本操作

Héc*_*rán 1 c# arrays operations

我正在一个个性化的Math类中工作,我打算实现基本的操作方法,这样它们就可以以简单的方式进行加,减,乘或除,而无需+ - * /每次都调用运算符.

    public class XMath
    {
        public static double Sum(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result += value;

            return result;
        }

        public static double Subtract(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result -= value;

            return result;
        }

        public static double Multiply(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result *= value;

            return result;
        }

        public static double Divide(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result /= value;

            return result;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是Sum方法工作得很好,但是其他方法会产生错误的结果

所以,如果+ =它有效,因为- =,*=/ =

dee*_*see 6

主要问题是您result使用0 初始化变量.

假设数组double[] values = new [] { 1.0, 2.0, 3.0 },您的Sum方法计算0 + 1 + 2 + 3,Subtract计算0 - 1 - 2 - 3,Multiply计算0 * 1 * 2 * 3等.

额外的0对总和没有影响,但它会影响其他操作.

您应该使用数组的第一个元素而不是0来初始化您的操作.

您还可以查看将简化代码的Aggregate方法

values.Aggregate((x, y) => x + y);
// ...
values.Aggregate((x, y) => x - y);
// ...
values.Aggregate((x, y) => x * y);
// ...
values.Aggregate((x, y) => x / y);
Run Code Online (Sandbox Code Playgroud)