What is the difference between typeof and is when comparing object types?
Possible Duplicate:
Type Checking: typeof, GetType, or is?
所以我比较了一个控件的类型,我想我可以这样做。
1 |
但是,我得到了以下警告。
1 |
所以如果我切换到这个位置,警告就会消失。
1 |
在比较控件类型时,该警告的确切含义以及typeof和is之间的区别是什么?
1 |
以查看控件是否为类型的实例。
修改后的版本获取控件的运行时类型,并将其与
为什么要发出警告?
The is keyword causes a compile-time warning if the expression is
known to always be true or to always be false, but typically evaluates
type compatibility at run time.
资料来源:MSDN
对于实现给定类型的所有对象,is运算符将返回true。getType函数返回对象的类型实例。因此,根据您的场景,将决定您希望如何执行类型检查。
采用以下代码
1 2 3 | public interface IFoo { } public class Foo : IFoo { } public class FooDerived : Foo { } |
然后,由于ifoo是一个接口(同样适用于抽象类),因此下面的检查将始终为false,因为没有具体的实现。这可能是编译器在大喊的。
1 |
如果检查结果如下,那么FOO和FOORDEVIED都是正确的,而其他一切都是错误的。
1 | obj is IFoo |
如果要确保某个对象是特定类型,而不是任何实现该类型的对象,则要执行以下检查,这对于foo是正确的,但对于fooderived不是。
1 |