Code/Functions/Mathematical/SumFunction.cs
using Expressive.Expressions;
using Expressive.Helpers;
using System.Collections;
namespace Expressive.Functions.Mathematical
{
internal class SumFunction : FunctionBase
{
#region IFunction Members
public override string Name { get { return "Sum"; } }
public override object Evaluate(IExpression[] parameters, Context context)
{
this.ValidateParameterCount(parameters, -1, 1);
object result = 0;
foreach (var value in parameters)
{
object evaluatedValue = value.Evaluate(Variables);
IEnumerable enumerable = evaluatedValue as IEnumerable;
if (enumerable != null)
{
object enumerableSum = 0;
foreach (var item in enumerable)
{
// When summing we don't want to bail out early with a null value.
enumerableSum = Numbers.Add(enumerableSum ?? 0, item ?? 0);
}
evaluatedValue = enumerableSum;
}
// When summing we don't want to bail out early with a null value.
result = Numbers.Add(result ?? 0, evaluatedValue ?? 0);
}
return result;
}
#endregion
}
}