使用此命令检查c是否是TForm的实例。

c.GetType().Name.CompareTo("TForm") == 0

除了使用字符串作为CompareTo()的参数之外,还有更类型安全的方法吗?


当前回答

是的,“is”关键字:

if (c is TForm)
{
    ...
}

详情见MSDN: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx

检查对象是否与给定类型兼容。例如,可以确定一个对象是否与string类型兼容,如下所示:

其他回答

如果你想使用c作为TForm,它比其他答案更紧凑:

if(c is TForm form){
    form.DoStuff();
}
if(c is TFrom)
{
   // Do Stuff
}

或者如果你计划使用c作为一个TForm,使用下面的例子:

var tForm = c as TForm;
if(tForm != null)
{
   // c is of type TForm
}

第二个示例只需要检查一次c是否为TForm类型。如果你检查c是否为TForm类型,然后强制转换它,CLR会进行额外的检查。 这是参考资料。

编辑:从乔恩·斯基特那里偷来的

如果你想确保c是TForm的,而不是任何从TForm继承的类,那么使用

if(c.GetType() == typeof(TForm))
{
   // Do stuff cause c is of type TForm and nothing else
}

这里不同的答案有两种不同的含义。

如果您想检查一个实例是否属于确切的类型,那么

if (c.GetType() == typeof(TForm))

才是正确的选择。

如果你想知道c是一个TForm的实例还是一个子类,那么使用is/as:

if (c is TForm)

or

TForm form = c as TForm;
if (form != null)

清楚你真正想要的是哪种行为是值得的。

是的,“is”关键字:

if (c is TForm)
{
    ...
}

详情见MSDN: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx

检查对象是否与给定类型兼容。例如,可以确定一个对象是否与string类型兼容,如下所示:

正如其他人提到的,“is”关键字。但是,如果您稍后要将其转换为该类型,例如。

TForm t = (TForm)c;

然后你应该使用“as”关键字。

例如,TForm t = c作为TForm。

然后你可以检查

if(t != null)
{
 // put TForm specific stuff here
}

不要和is合并,因为这是一张重复的支票。