public override bool MoveNext()
		{
            for (int i = this.indices.Length - 1; i >= 0; i--)
            {
                if (this.indices[i] < this.Domains[i].Count - 1)
                {
                    // updating index
                    this.indices[i]++;
                    // reseting the other to zero
                    for(int j = i+1 ; j < this.indices.Length;++j)
                        this.indices[j] = 0;

                    // getting the tuple
                    tuple = new Tuple();
                    for (int k = 0; k < this.indices.Length; ++k)
                    {
                        object item = this.Domains[k][this.indices[k]];
                        tuple.Add(item);
                    }

                    return true;
                }
            }


            return false;
        }
        public override bool MoveNext()
        {
            for (int i = this.indices.Length - 1; i >= 0; i--)
            {
                if (this.indices[i] < this.Domains[i].Count - 1)
                {
                    // updating index
                    this.indices[i]++;
                    // reseting the other to zero
                    for (int j = i + 1; j < this.indices.Length; ++j)
                    {
                        this.indices[j] = 0;
                    }

                    // getting the tuple
                    tuple = new Tuple();
                    for (int k = 0; k < this.indices.Length; ++k)
                    {
                        object item = this.Domains[k][this.indices[k]];
                        tuple.Add(item);
                    }

                    return(true);
                }
            }


            return(false);
        }