Example #1
0
        /// <summary>
        /// Get Internal type of IList
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Type GetActualType(this Type type)
        {
            if (CachedActualType.ContainsKey(type))
            {
                return(CachedActualType[type]);
            }

            if (type.GetTypeInfo().IsArray)
            {
                CachedActualType.TryAdd(type, type.GetElementType());
            }
            else if (type.GenericTypeArguments.Any())
            {
                CachedActualType.TryAdd(type, type.GenericTypeArguments.First());
            }
            else if (type.FullName?.Contains("List`1") ?? false)
            {
                CachedActualType.TryAdd(type, type.GetRuntimeProperty("Item").PropertyType);
            }
            else
            {
                CachedActualType.TryAdd(type, type);
            }

            return(CachedActualType.Get(type));
        }