Type.GetType无效

Daf*_*ffi 6 c# types uri

我刚刚注意到函数中的一个错误:

Type.GetType("System.Uri");
Run Code Online (Sandbox Code Playgroud)

返回值为null,而以下函数运行良好...

Type.GetType("System.string");
Type.GetType("System.bool");
Type.GetType("System.DateTime");
Run Code Online (Sandbox Code Playgroud)

...

任何人都知道,为什么返回的Type为null?

编辑:删除Uri双重进入...

the*_*yer 16

Type.GetType("System.Uri")返回的原因null是类型位于system.dll而不是mscorlib.dll.您必须使用上面提到的程序集限定名称.

来自MSDN:

typeName 类型:System.String

要获取的类型的程序集限定名称.请参阅AssemblyQualifiedName.如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则提供由其名称空间限定的类型名称就足够了.


小智 10

我也遇到了这个问题,并意识到,特别是在使用JIT编译的ASP.Net中,我并不总是知道汇编信息.我在ReflectionUtilities类中添加了以下内容.它在某种程度上是"破解坚果"的"大锤",但它适用于AssemblyQualifiedName和基本类FullName.第一个基本上是对CurrentDomainAssemblies的搜索进行短路,否则必须进行搜索.

    public static Type FindType(string qualifiedTypeName)
    {
        Type t = Type.GetType(qualifiedTypeName);

        if (t != null)
        {
            return t;
        }
        else
        {
            foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
            {
                t = asm.GetType(qualifiedTypeName);
                if (t != null)
                    return t;
            }
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:鉴于反射性能问题,如果可能的话,不应在没有装配限定的情况下调用内部循环.最好访问您需要的第一个项目,从中提取装配信息,然后从那里继续.并不总是合适但效率更高(如果反射中的任何内容都可以称为高效:-)).

阿利斯泰尔