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:只需在消息边界内使用一些填充空间,以克服最小长度限制:)