public ICacheItem Get(string key) { ICacheItem result = null; LinkedListNode <ICacheItem> item = null; mItemTable.TryGetValue(key, out item); if (item != null) { result = item.Value; result.Increment(); if (LevelValue > 0 && result.Upgrade() && UpgradeHandler != null) { OnUpgrade(item); } else { lock (this) { if (item.List == mItemLink) { mItemLink.Remove(item); mItemLink.AddFirst(item); } } } } return(result); }