MvcApi.Formatting.MediaTypeFormatter.GetOrAddDelegatingType C# (CSharp) Method

GetOrAddDelegatingType() private static method

private static GetOrAddDelegatingType ( Type type ) : Type
type Type
return Type
        private static Type GetOrAddDelegatingType(Type type)
        {
            return delegatingEnumerableCache.GetOrAdd(type, delegate(Type typeToRemap)
            {
                Type elementType;
                if (typeToRemap.GetGenericTypeDefinition().Equals(EnumerableTypes.EnumerableInterfaceGenericType))
                {
                    elementType = typeToRemap.GetGenericArguments()[0];
                }
                else
                {
                    elementType = typeToRemap.GetInterface(EnumerableTypes.EnumerableInterfaceGenericType.FullName).GetGenericArguments()[0];
                }
                Type typeKey = EnumerableTypes.QueryableWrapperGenericType.MakeGenericType(new Type[] { elementType });
                ConstructorInfo constructor = typeKey.GetConstructor(new Type[]
                {
                    EnumerableTypes.EnumerableInterfaceGenericType.MakeGenericType(new Type[]	{ elementType	})
                });
                delegatingEnumerableConstructorCache.TryAdd(typeKey, constructor);
                return typeKey;
            });
        }