public ArrayIndexEnumerator(Array value) { Type arrayType = value.GetType(); rank = arrayType.GetArrayRank(); uppers = new int[rank]; lowers = new int[rank]; idx = new int[rank]; len = 1; for (int i = 0; i < rank; i++) { int high = uppers[i] = value.GetUpperBound(i); int low = lowers[i] = value.GetLowerBound(i); if (low != 0) { PrologCLR.Error("LowerBound !=0 in " + arrayType); } int lenSize = (high - low + 1); len *= lenSize; } }