如何确定Type是否为RunTimeType类型?我有这个工作,但它有点kludgy:
private bool IsTypeOfType(Type type)
{
return type.FullName == "System.RuntimeType";
}
答案 0 :(得分:8)
我想您确实想知道Type
对象是否描述了Type
类,但Type
对象是typeof(RuntimeType)
而不是typeof(Type)
和因此将其与typeof(Type)
进行比较失败。
您可以做的是检查Type
对象描述的类型的实例是否可以分配给Type
类型的变量。这会得到所需的结果,因为RuntimeType
来自Type
:
private bool IsTypeOfType(Type type)
{
return typeof(Type).IsAssignableFrom(type);
}
如果您确实需要知道描述Type
类的Type
对象,可以使用GetType方法:
private bool IsRuntimeType(Type type)
{
return type == typeof(Type).GetType();
}
但是,因为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
答案 1 :(得分:0)
真的,唯一的麻烦是System.RuntimeType
是internal
,所以要做一些简单的事情,例如:
if (obj is System.RuntimeType)
无法编译:
CS0122'RuntimeType'由于其保护级别而无法访问。
所以上面@dtb的解决方案是正确的。扩展他们的答案:
void Main()
{
object obj = "";
// obj = new {}; // also works
// This works
IsRuntimeType(obj.GetType()); // Rightly prints "it's a System.Type"
IsRuntimeType(obj.GetType().GetType()); // Rightly prints "it's a System.RuntimeType"
// This proves that @Hopeless' comment to the accepted answer from @dtb does not work
IsWhatSystemType(obj.GetType()); // Should return "is a Type", but doesn't
IsWhatSystemType(obj.GetType().GetType());
}
// This works
void IsRuntimeType(object obj)
{
if (obj == typeof(Type).GetType())
// Can't do `obj is System.RuntimeType` -- inaccessible due to its protection level
Console.WriteLine("object is a System.RuntimeType");
else if (obj is Type)
Console.WriteLine("object is a System.Type");
}
// This proves that @Hopeless' comment to the accepted answer from @dtb does not work
void IsWhatSystemType(object obj)
{
if (obj is TypeInfo)
Console.WriteLine("object is a System.RuntimeType");
else
Console.WriteLine("object is a Type");
}
正在工作的.NET小提琴here。
答案 2 :(得分:-1)
return type == typeof(MyObjectType) || isoftype(type.BaseType) ;