/// <summary>
        ///     Gets the list of a specified type.
        ///     May create a new one.
        /// </summary>
        /// <param name="specType">The type to get the list of</param>
        /// <returns>A list</returns>
        protected TypeList GetTypeList <TSub>() where TSub : class, TBase
        {
            Type thisType = typeof(TSub);

            if (!this.typeDict.ContainsKey(thisType))
            {
                TypeList typeList = TypeList.New <TSub>();

                foreach (KeyValuePair <Type, TypeList> item in this.typeDict)
                {
                    TypeList otherList = item.Value;

                    if (otherList.Type.IsSubclassOf(thisType))
                    {
                        typeList.Subs.Add(otherList.Main);
                    }
                    else if (thisType.IsSubclassOf(otherList.Type))
                    {
                        otherList.Subs.Add(typeList.Main);
                    }
                }

                this.storage.Add(typeList.Main);
                this.typeDict.Add(thisType, typeList);

                return(typeList);
            }

            return(this.typeDict[thisType]);
        }