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