protected virtual object GetCachedValue(int i) { object retVal = _valsByIndex[i]; if (retVal == DBNull.Value) { retVal = GetDataObject(i); _valsByIndex[i] = retVal; } return retVal; }