使用此选项检查c
是TForm
的实例。
c.GetType().Name.CompareTo("TForm") == 0
除了使用string
作为CompareTo()
的参数之外,还有更安全的方法吗?
答案 0 :(得分:359)
这里的不同答案有两种不同的含义。
如果要检查实例是否是确切类型,那么
if (c.GetType() == typeof(TForm))
是要走的路。
如果您想知道c
是TForm
的实例还是子类,请使用is
/ as
:
if (c is TForm)
或
TForm form = c as TForm;
if (form != null)
值得在脑海中清楚地了解您真正想要的这些行为。
答案 1 :(得分:34)
if(c is TFrom)
{
// Do Stuff
}
或者如果您打算将c
用作TForm
,请使用以下示例:
var tForm = c as TForm;
if(tForm != null)
{
// c is of type TForm
}
第二个示例只需检查c
类型TForm
是否为{1}}。如果您检查c
是否属于TForm
类型然后进行投射,则CLR会进行额外检查。
这是reference。
编辑:Jon Skeet被盗
如果您想确保c
属于TForm
,而不是任何继承自TForm
的类,请使用
if(c.GetType() == typeof(TForm))
{
// Do stuff cause c is of type TForm and nothing else
}
答案 2 :(得分:13)
是的,“是”关键字:
if (c is TForm)
{
...
}
查看有关MSDN的详细信息:http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
检查对象是否与给定类型兼容。例如,可以确定对象是否与字符串类型兼容,如下所示:
答案 3 :(得分:9)
另外,有点相同
Type.IsAssignableFrom(Type c)
“如果c和当前类型表示相同的类型,或者如果是,则为真 current Type位于c的继承层次结构中,如果是当前的 Type是c实现的接口,或者c是泛型类型 参数和当前Type表示c的约束之一。“
从这里开始:http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
答案 4 :(得分:6)
如果你想用c作为TForm,那么比其他答案更紧凑:
if(c is TForm form){
form.DoStuff();
}
答案 5 :(得分:3)
尝试以下
if (c is TForm) {
...
}
答案 6 :(得分:2)
正如其他人所说,“是”关键字。但是,如果您以后要将其转换为该类型,例如
TForm t = (TForm)c;
然后你应该使用“as”关键字。
e.g。 TForm t = c as TForm.
然后你可以检查
if(t != null)
{
// put TForm specific stuff here
}
请勿合并,因为它是重复检查。
答案 7 :(得分:0)
或
c.getType() == typeOf(TForm)
答案 8 :(得分:-1)
bool isValid = c.GetType() == typeof(TForm) ? true : false;
或更简单
bool isValid = c.GetType() == typeof(TForm);