Exemplo n.º 1
0
        public int[] GetLowerBounds()
        {
            if (bounds == null)
            {
                bounds = new int[array.Rank];
                for (int i = 0; i < array.Rank; i++)
                {
                    bounds[i] = array.GetLowerBound(i);
                }
            }

            return(bounds);
        }
        private DEBUG_PROPERTY_INFO[] CreateMultiDimArrayPropertyInfos(enum_DEBUGPROP_INFO_FLAGS dwFields, ArrayMirror array)
        {
            var arrayValues = new DEBUG_PROPERTY_INFO[array.Length];

            var dimIndex      = new int[array.Rank];
            var dimLowerBound = new int[array.Rank];
            var dimUpperBound = new int[array.Rank];

            for (int dim = 0; dim < array.Rank; dim++)
            {
                dimIndex[dim]      = array.GetLowerBound(dim);
                dimLowerBound[dim] = array.GetLowerBound(dim);
                dimUpperBound[dim] = array.GetLowerBound(dim) + array.GetLength(dim) - 1;
            }

            for (int i = 0; i < array.Length; i++)
            {
                var valueAtIndex = array.GetValues(i, 1).First();
                arrayValues[i] = new MonoProperty(_stackFrame, _currentMirror, array.Type.GetElementType(), valueAtIndex, string.Join(",", dimIndex)).GetDebugPropertyInfo(dwFields);

                for (int dim = array.Rank - 1; dim >= 0; dim--)
                {
                    if (dimIndex[dim] < dimUpperBound[dim])
                    {
                        dimIndex[dim]++;
                        break;
                    }
                    else
                    {
                        dimIndex[dim] = dimLowerBound[dim];
                    }
                }
            }

            return(arrayValues);
        }