检查实例是否属于某种类型

时间:2010-08-24 21:31:36

标签: c# .net

使用此选项检查cTForm的实例。

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

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

9 个答案:

答案 0 :(得分:359)

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

如果要检查实例是否是确切类型,那么

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

是要走的路。

如果您想知道cTForm 的实例还是子类,请使用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);