当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《检查实例是否属于某种类型》经验,为你挑选了5个好方法。

用它来检查是否c是实例TForm.

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

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



1> Jon Skeet..:

这里的不同答案有两个不同的含义.

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

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

是要走的路.

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

if (c is TForm)

要么

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

值得在脑海中清楚地了解您真正想要的这些行为.


使用C#7,您可以将`is`和`as`与模式匹配结合起来:`if(x是TForm tf){...`
小注意事项:如果您不想使用演员表的结果,请使用"is",如果您这样做,请使用"as".

2> PostMan..:
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
}



3> boj..:

是的,"是"关键字:

if (c is TForm)
{
    ...
}

有关MSDN的详细信息,请访问:http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx

检查对象是否与给定类型兼容.例如,可以确定对象是否与字符串类型兼容,如下所示:



4> Brad Cunning..:

而且,有点相同

Type.IsAssignableFrom(Type c)

"如果c和当前Type表示相同的类型,或者当前Type在c的继承层次结构中,或者当前Type是c实现的接口,或者c是泛型类型参数和当前类型,则为真代表c的约束之一."

从这里:http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx



5> 小智..:

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

if(c is TForm form){
    form.DoStuff();
}

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有