如何确定Type是否为RunTimeType?

Gre*_*zer 5 c#

如何确定Type是否为RunTimeType类型?我有这个工作,但它有点kludgy:

    private bool IsTypeOfType(Type type)
    {
        return type.FullName ==  "System.RuntimeType";
    }
Run Code Online (Sandbox Code Playgroud)

dtb*_*dtb 8

我想你真的想知道一个Type对象是否描述了这个Type类,但是Type对象是否typeof(RuntimeType)存在typeof(Type),因此将它与typeof(Type)失败进行比较.

您可以做的是检查Type对象描述的类型的实例是否可以分配给类型的变量Type.这给出了期望的结果,因为RuntimeType源于Type:

private bool IsTypeOfType(Type type)
{
    return typeof(Type).IsAssignableFrom(type);
}
Run Code Online (Sandbox Code Playgroud)

如果您确实需要知道Type描述Type该类的对象,可以使用GetType方法:

private bool IsRuntimeType(Type type)
{
    return type == typeof(Type).GetType();
}
Run Code Online (Sandbox Code Playgroud)

但是,因为typeof(Type) != typeof(Type).GetType(),你应该避免这种情况.


例子:

IsTypeOfType(typeof(Type))                          // true
IsTypeOfType(typeof(Type).GetType())                // true
IsTypeOfType(typeof(string))                        // false
IsTypeOfType(typeof(int))                           // false

IsRuntimeType(typeof(Type))                         // false
IsRuntimeType(typeof(Type).GetType())               // true
IsRuntimeType(typeof(string))                       // false
IsRuntimeType(typeof(int))                          // false
Run Code Online (Sandbox Code Playgroud)