Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查一个对象是否是一个类,而不是一个派生类?_C#_Inheritance - Fatal编程技术网

C# 如何检查一个对象是否是一个类,而不是一个派生类?

C# 如何检查一个对象是否是一个类,而不是一个派生类?,c#,inheritance,C#,Inheritance,有没有办法确定一个对象到底是一个类,而不是它的派生类 例如: class A : X { } class B : A { } bool isExactlyA(X obj) { return obj.GetType() == typeof(A); } 我可以这样做: bool isExactlyA(X obj) { return (obj is A) && !(obj is B); } 当然,如果有更多的A派生类,我必须添加和条件。在您的特定实例中: clas

有没有办法确定一个对象到底是一个类,而不是它的派生类

例如:

class A : X { }

class B : A { }
bool isExactlyA(X obj)
{
   return obj.GetType() == typeof(A);
}
我可以这样做:

bool isExactlyA(X obj)
{
   return (obj is A) && !(obj is B);
} 

当然,如果有更多的
A
派生类,我必须添加和条件。

在您的特定实例中:

class A : X { }

class B : A { }
bool isExactlyA(X obj)
{
   return obj.GetType() == typeof(A);
}
我明白了

control.GetType() ==  typeof(Label)

概括斯奈克的答案:

public static bool IsExactly<T>(this object obj) where T : class
{
  return obj != null && obj.GetType() == typeof(T);
}
publicstaticbool恰好是(这个对象obj),其中T:class
{
返回obj!=null&&obj.GetType()==typeof(T);
}
现在你可以说

if (foo.IsExactly<Frob>()) ...
if(foo.IsExactly())。。。

警告:明智地对对象使用扩展方法。根据您使用此技术的范围,这可能是不合理的。

typeof需要的类型不是正确的类。如果你做了typeof(control),你总是能得到控制----------------------@eric:只需在消息边界内使用一些填充空间,以克服最小长度限制:)