private EvaluatedExpression GetArrayElement(EvaluatedExpression array, EvaluatedExpression index) { Contract.Requires <ArgumentNullException>(array != null, "array"); Contract.Requires <ArgumentNullException>(index != null, "index"); Contract.Ensures(Contract.Result <EvaluatedExpression>() != null); IArrayReference arrayReference = array.Value as IArrayReference; if (arrayReference == null) { throw new InvalidOperationException(); } long indexValue; if (TryGetIntegralValue(index.Value, out indexValue)) { string name = string.Format("[{0}]", indexValue); string fullName = string.Format("({0})[{1}]", array.FullName, index.FullName); ILocalVariable localVariable = array.LocalVariable; IObjectReference referencer = array.Value as IObjectReference; IField field = array.Field; IMethod method = null; IValue value = arrayReference.GetValue((int)indexValue); IType valueType = ((IArrayType)arrayReference.GetReferenceType()).GetComponentType(); bool strongReference = false; return(new EvaluatedExpression(name, fullName, localVariable, referencer, field, method, (int)indexValue, value, valueType, strongReference, array.HasSideEffects || index.HasSideEffects)); } throw new InvalidOperationException(); }