ModelBuilder.EnumerableTypeCreator.FindEnumerableTypeArgument C# (CSharp) Method

FindEnumerableTypeArgument() private static method

private static FindEnumerableTypeArgument ( Type type ) : Type
type System.Type
return System.Type
        private static Type FindEnumerableTypeArgument(Type type)
        {
            // The type may implement multiple interfaces including IEnumerable<T> where the type generic definition of the type itself is not the same as the IEnumerable<T> definition
            // Dictionary<TKey, TValue> is an example of this where it implements IEnumerable<KeyValuePair<TKey, TValue>>
            var topLevelTypeArgument = GetEnumerableTypeArgument(type);

            if (topLevelTypeArgument != null)
            {
                // The type itself is IEnumerable<T> so we don't need to search the implemented interfaces
                return topLevelTypeArgument;
            }

            var interfaces = type.GetInterfaces();

            for (var index = 0; index < interfaces.Length; index++)
            {
                var internalType = interfaces[index];

                var genericTypeArgument = GetEnumerableTypeArgument(internalType);

                if (genericTypeArgument != null)
                {
                    return genericTypeArgument;
                }
            }

            return null;
        }