在C#中,如何查找给定对象是否具有特定的祖先?
例如,假设我有以下类结构。
ContainerControl | +----> Form | +--> MyNormalForm | +--> MyCustomFormType | +---> MyCustomForm
如果我有这样的方法:
void MyCoolMethod (Form form)
如何找到表单是否来自MyCustomFormType?
答案 0 :(得分:8)
if (form is MyCustomFormType) {
// form is an instance of MyCustomFormType!
}
答案 1 :(得分:4)
if( form is MyCustomFormType)
如果要将其强制转换为该类型,则应使用as运算符并检查是否为空。
MyCustomFormType myCustomFormType = form as MyCustomFormType;
if( myCustomFormType != null)
{
// this is the type you are looking for
}
答案 2 :(得分:2)
正如任意数量的受访者通过is
(或as
)运营商添加的那样。
但是,想要找出确切的类型是classic code smell。尽量不这样做。如果您想根据表单的确切类型做出决策,请尝试将该逻辑放在重写的虚拟方法中,而不是在类外。
答案 3 :(得分:0)
is
运算符:
bool isOk = form is MyCustomForm;
答案 4 :(得分:0)
使用is
运算符。
e.g。
if (form is MyCustomFormType) {
do whatever
}
答案 5 :(得分:0)
void MyCoolMethod (Form form) {
if (form is MyCustomFormType)
// do your cool stuff here
}
答案 6 :(得分:0)
var myCustomForm = form as MyCustomFormType;
if(myCustomForm != null)
{
// form was a MyCustomFormType instance and you can work with myCustomForm
}
如果要将表单作为MyCustomFormType进行操作,请避免使用is
。通过使用as,您只需要一个演员。