private static TypeInfo NextTypeInfo(Type initialArg, TypeInfo curTypeInfo)
        {
            var      lookingUp = initialArg;
            TypeInfo nextTypeInfo;

            if (curTypeInfo.TypeChain == null)
            {
                curTypeInfo.TypeChain = new Dictionary <Type, TypeInfo>();
            }

            if (!curTypeInfo.TypeChain.TryGetValue(lookingUp, out nextTypeInfo))
            {
                nextTypeInfo = new TypeInfo();
                if (TypeHelper.CanCache(lookingUp))
                {
                    curTypeInfo.TypeChain[lookingUp] = nextTypeInfo;
                }
            }
            return(nextTypeInfo);
        }