public static Type GetItemTypeOfClosedGenericIEnumerable(Type enumerableType, string argumentName)
        {
            LinqUtility.CheckNotNull("enumerableType", enumerableType);
            LinqUtility.CheckNotNullOrEmpty("argumentName", argumentName);

            Type itemType;

            if (!TryGetItemTypeOfClosedGenericIEnumerable(enumerableType, out itemType))
            {
                var message = string.Format("Expected a closed generic type implementing IEnumerable<T>, but found '{0}'.", enumerableType);
                throw new ArgumentException(message, argumentName);
            }

            return(itemType);
        }