[РЕДАКТИРОВАТЬ] 2015-10-29
Смотрите комментарий Марка Совула ниже. UGH!
[/ EDIT]
Я только что оставил свои комментарии ниже по ссылке (Замечания), которую предоставил Jalayn. Кто-нибудь здесь хочет прокомментировать? Любой, кто рассчитывает получить ошибку, смотрите мой последний абзац ниже и позор вам! :)
Будучи упрямым типом, я решил попробовать. Я написал код, который выглядит примерно так:
var myObject = new MyObjectType() { prop1 = "string 1", prop2 = 1 };
var cacheKey = "mycachekey";
var cTime = DateTime.Now.AddMinutes(11);
var cExp = System.Web.Caching.Cache.NoSlidingExpiration;
var cPri = System.Web.Caching.CacheItemPriority.Normal;
HttpContext.Current.Cache.Add(cacheKey, myObject, null, cTime, cExp, cPri, null);
myObject.prop1 = "string 2"; myObject.prop2 = 2;
HttpContext.Current.Cache.Add(cacheKey, myObject, null, cTime, cExp, cPri, null);
myObject.prop1 = "string 3"; myObject.prop2 = 3;
HttpContext.Current.Cache.Insert(cacheKey, myObject, null, cTime, cExp, cPri, null);
myObject.prop1 = "string 4"; myObject.prop2 = 4;
HttpContext.Current.Cache.Insert(cacheKey, myObject, null, cTime, cExp, cPri, null);
myObject.prop1 = "string 5"; myObject.prop2 = 5;
HttpContext.Current.Cache.Add(cacheKey, myObject, null, cTime, cExp, cPri, null);
myObject.prop1 = "string 6"; myObject.prop2 = 6;
HttpContext.Current.Cache.Insert(cacheKey, myObject, null, cTime, cExp, cPri, null);
var foo = (MyObjectType)HttpContext.Current.Cache[cacheKey];
Угадай что. Все прошло нормально. Я даже поставил точку останова до и после этого блока кода и выполнил HttpContext.Current.Cache (в окне Immediate VS) в каждой точке и проверил, что только один элемент был фактически добавлен в кэш. И foo.prop1 = "строка 6".
Кто-нибудь из Microsoft хочет объяснить, почему это НЕ выдает исключение? Хотя это плохая практика (а наше приложение этого не делает), кто-то может рассчитывать на получение ошибки, и его приложение может работать не так, как ожидалось, поскольку CLR не выдает ошибку, даже если ваша документация говорит, что это произойдет.