public T this[int index]
        {
            get
            {
                if (index >= _internList.Count)
                {
                    return(default(T));
                }
                T result;
                return(_internList[index].TryGetTarget(out result) ? result : default(T));
            }
            set
            {
                // ReSharper disable once LoopVariableIsNeverChangedInsideLoop
                while (_internList.Count <= index)
                {
                    _internList.Add(new WeakReference <T>(default(T)));
                }

                ApplicationCache.Cache(value);
                _internList[index] = new WeakReference <T>(value);
            }
        }