可能重复:
类型检查: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和之间的区别是什么.
GetType返回一个实例,System.Type这绝不是实例TSendForReview.你可能想用
if(control[0] is TSendForReview)
Run Code Online (Sandbox Code Playgroud)
查看控件是否是您的类型的实例.
您的修改版本获取控件的运行时类型,并将其与类型实例进行比较TSendForReview.这与使用is不同,因为它必须具有确切的类型,而is对于子类型将返回true TSendForReview.
为什么警告?
如果已知表达式始终为true或始终为false,则is关键字会导致编译时警告,但通常会在运行时评估类型兼容性.
资料来源:MSDN