Algebra.QL.Extensions.Eval.Expr.SumExpr.Evaluate C# (CSharp) Method

Evaluate() public method

public Evaluate ( IValueEnvironment env ) : ValueContainer
env IValueEnvironment
return Algebra.QL.Eval.Value.ValueContainer
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            //TODO: Make it so no casting is needed
            DictionaryKeyValueObserver<string, ValueContainer> repeatVariables = ((Environment.ValueEnvironment)env).GetRange(Name);
            ValueContainer value = new ValueContainer(0);

            Action onValueChanged = () =>
            {
                double sum = 0;

                foreach (ValueContainer item in repeatVariables.Where(v => !v.Inactive))
                {
                    sum += Convert.ToDouble(item.Value);
                }

                value.Value = sum;
            };

            Action onCollectionChange = () =>
            {
                foreach (ValueContainer item in repeatVariables)
                {
                    item.ValueChanged += onValueChanged;
                }

                onValueChanged();
            };
            repeatVariables.FilterResultChanged += onCollectionChange;
            onCollectionChange();

            return value;
        }