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方法工作得很好,但是其他方法会产生错误的结果
所以,如果+ =它有效,因为- =,*=和/ =否
主要问题是您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)