typeof和在比较对象类型时有什么区别?

mea*_*nny 4 c# controls types

可能重复:
类型检查:typeof,GetType还是?

所以我在比较一个Control的类型,我想我可以做这样的事情.

if (control[0].GetType() is TSendForReview)
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下警告.

The given expression is never of the provided ('MyApp.Controls.TSendForReview') type    
Run Code Online (Sandbox Code Playgroud)

因此,如果我将其切换到此警告就会消失.

if (control[0].GetType() == typeof(TSendForReview))
Run Code Online (Sandbox Code Playgroud)

这个警告究竟意味着什么,以及在比较控件类型时typeof和之间的区别是什么.

Lee*_*Lee 8

GetType返回一个实例,System.Type这绝不是实例TSendForReview.你可能想用

if(control[0] is TSendForReview)
Run Code Online (Sandbox Code Playgroud)

查看控件是否是您的类型的实例.

您的修改版本获取控件的运行时类型,并将其与类型实例进行比较TSendForReview.这与使用is不同,因为它必须具有确切的类型,而is对于子类型将返回true TSendForReview.

为什么警告?

如果已知表达式始终为true或始终为false,则is关键字会导致编译时警告,但通常会在运行时评估类型兼容性.

资料来源:MSDN