Exemplo n.º 1
0
        protected override Variable Evaluate(string data, ref int from)
        {
            // Първо проверете дали този елемент е част от масив:
            if (from - 1 < data.Length && data[from - 1] == Constants.START_ARRAY)
            {
                // Даден е индекс - може да е за елемент от сорта.
                if (_value.Tuple == null || _value.Tuple.Count == 0)
                {
                    throw new ArgumentException("Няма нищо за индекса");
                }

                Variable index = Parser.LoadAndCalculate(data, ref from,
                                                         Constants.END_ARRAY_ARRAY);

                Utils.CheckInteger(index);

                if (index.Value < 0 || index.Value >= _value.Tuple.Count)
                {
                    throw new ArgumentException("Неправилен индекс [" + index.Value +
                                                "] за малкия размер " + _value.Tuple.Count);
                }

                Utils.MoveForwardIf(data, ref from, Constants.END_ARRAY);
                return(_value.Tuple[(int)index.Value]);
            }

            return(_value);
        }