用它来检查是否c
是实例TForm
.
c.GetType().Name.CompareTo("TForm") == 0
除了使用string
as作为参数之外,还有更安全的类型CompareTo()
吗?
这里的不同答案有两个不同的含义.
如果要检查实例是否是精确类型,那么
if (c.GetType() == typeof(TForm))
是要走的路.
如果你想知道c
是实例TForm
还是子类,那么使用is
/ as
:
if (c is TForm)
要么
TForm form = c as TForm; if (form != null)
值得在脑海中清楚地了解您真正想要的这些行为.
if(c is TFrom) { // Do Stuff }
或者如果您打算c
用作a TForm
,请使用以下示例:
var tForm = c as TForm; if(tForm != null) { // c is of type TForm }
第二个示例只需要检查是否c
属于类型TForm
一次.如果您检查是否c
有类型TForm
然后投射它,那么CLR会经过额外的检查.这是一个参考.
编辑:Jon Skeet被盗
如果你想确定c
是否有TForm
继承的类TForm
,那么使用
if(c.GetType() == typeof(TForm)) { // Do stuff cause c is of type TForm and nothing else }
是的,"是"关键字:
if (c is TForm) { ... }
有关MSDN的详细信息,请访问:http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
检查对象是否与给定类型兼容.例如,可以确定对象是否与字符串类型兼容,如下所示:
而且,有点相同
Type.IsAssignableFrom(Type c)
"如果c和当前Type表示相同的类型,或者当前Type在c的继承层次结构中,或者当前Type是c实现的接口,或者c是泛型类型参数和当前类型,则为真代表c的约束之一."
从这里:http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
如果你想使用c作为TForm,比其他答案更紧凑:
if(c is TForm form){ form.DoStuff(); }