我见过很多人使用以下代码:
Type t = obj1.GetType();
if (t == typeof(int))
// Some code here
但我知道你也可以这样做:
if (obj1.GetType() == typeof(int))
// Some code here
或者这个:
if (obj1 is int)
// Some code here
就我个人而言,我觉得最后一个是最干净的,但我有什么遗漏吗?哪一个最好用,还是个人喜好?
我更喜欢的是
也就是说,如果你使用的是is,你很可能没有正确使用继承。
假设那个人:实体,那个动物:实体。Feed是Entity中的一种虚拟方法(让Neil开心)
class Person
{
// A Person should be able to Feed
// another Entity, but they way he feeds
// each is different
public override void Feed( Entity e )
{
if( e is Person )
{
// feed me
}
else if( e is Animal )
{
// ruff
}
}
}
相当地
class Person
{
public override void Feed( Person p )
{
// feed the person
}
public override void Feed( Animal a )
{
// feed the animal
}
}
1.
Type t = typeof(obj1);
if (t == typeof(int))
这是非法的,因为typeof只适用于类型,而不适用于变量。我假设obj1是一个变量。这样,typeof是静态的,它在编译时而不是运行时工作。
2.
if (obj1.GetType() == typeof(int))
如果obj1完全是int类型,则为true。如果obj2从int派生,则if条件将为false。
3.
if (obj1 is int)
如果obj1是一个int,或者它派生自一个名为int的类,或者它实现了一个称为int的接口,这就是真的。