/// <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)); }