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); }
public object GetElement(int[] indices) { int i = GetIndex(indices); return(array.GetValues(i, 1)[0]); }