// Token: 0x060014BF RID: 5311 RVA: 0x0003D710 File Offset: 0x0003B910
        private static Type ResolveType(Assembly assembly, string[] names, Func <Assembly, string, bool, Type> typeResolver, bool throwOnError, bool ignoreCase, ref StackCrawlMark stackMark)
        {
            string text = TypeNameParser.EscapeTypeName(names[0]);
            Type   type;

            if (typeResolver != null)
            {
                type = typeResolver(assembly, text, ignoreCase);
                if (type == null && throwOnError)
                {
                    string message = (assembly == null) ? Environment.GetResourceString("TypeLoad_ResolveType", new object[]
                    {
                        text
                    }) : Environment.GetResourceString("TypeLoad_ResolveTypeFromAssembly", new object[]
                    {
                        text,
                        assembly.FullName
                    });
                    throw new TypeLoadException(message);
                }
            }
            else if (assembly == null)
            {
                type = RuntimeType.GetType(text, throwOnError, ignoreCase, false, ref stackMark);
            }
            else
            {
                type = assembly.GetType(text, throwOnError, ignoreCase);
            }
            if (type != null)
            {
                BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic;
                if (ignoreCase)
                {
                    bindingFlags |= BindingFlags.IgnoreCase;
                }
                int i = 1;
                while (i < names.Length)
                {
                    type = type.GetNestedType(names[i], bindingFlags);
                    if (type == null)
                    {
                        if (throwOnError)
                        {
                            throw new TypeLoadException(Environment.GetResourceString("TypeLoad_ResolveNestedType", new object[]
                            {
                                names[i],
                                names[i - 1]
                            }));
                        }
                        break;
                    }
                    else
                    {
                        i++;
                    }
                }
            }
            return(type);
        }
Exemplo n.º 2
0
        private static Type ResolveType(Assembly assembly, string[] names, Func <Assembly, string, bool, Type> typeResolver, bool throwOnError, bool ignoreCase, ref StackCrawlMark stackMark)
        {
            string str = TypeNameParser.EscapeTypeName(names[0]);
            Type   type;

            if (typeResolver != null)
            {
                type = typeResolver(assembly, str, ignoreCase);
                if (type == (Type)null & throwOnError)
                {
                    string resourceString;
                    if (!(assembly == (Assembly)null))
                    {
                        resourceString = Environment.GetResourceString("TypeLoad_ResolveTypeFromAssembly", (object)str, (object)assembly.FullName);
                    }
                    else
                    {
                        resourceString = Environment.GetResourceString("TypeLoad_ResolveType", (object)str);
                    }
                    throw new TypeLoadException(resourceString);
                }
            }
            else
            {
                type = !(assembly == (Assembly)null) ? assembly.GetType(str, throwOnError, ignoreCase) : (Type)RuntimeType.GetType(str, throwOnError, ignoreCase, false, ref stackMark);
            }
            if (type != (Type)null)
            {
                BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.NonPublic;
                if (ignoreCase)
                {
                    bindingAttr |= BindingFlags.IgnoreCase;
                }
                for (int index = 1; index < names.Length; ++index)
                {
                    type = type.GetNestedType(names[index], bindingAttr);
                    if (type == (Type)null)
                    {
                        if (throwOnError)
                        {
                            throw new TypeLoadException(Environment.GetResourceString("TypeLoad_ResolveNestedType", (object)names[index], (object)names[index - 1]));
                        }
                        break;
                    }
                }
            }
            return(type);
        }