2013-07-24 226 views
14

我正试图找到以下的替代方案,以便我可以利用is运算符。有没有办法将参数传递给is运算符?

public bool IsOfType(Type type) 
{ 
    return this._item.GetType() == type; 
} 

类似下面的内容,它不会编译。

public bool IsOfType(Type type) 
{ 
    return this._item is type; 
} 

回答

28

我认为你正在寻找Type.IsAssignableFrom

public bool IsOfType(Type type) 
{ 
    return _item != null && type.IsAssignableFrom(_item.GetType()); 
} 

或者,如果你可以让法通用的,这就是简单,因为你可以使用is与一类参数:

public bool IsOfType<T>() 
{ 
    return _item is T; 
} 

编辑:正如在Wim的答案中指出的那样,还有Type.IsInstanceOf这使得非通用方法OD简单:

public bool IsOfType(Type type) 
{ 
    return type.InstanceOf(_item); 
} 
+2

你打我吧;) –

+1

刚想发布仿制药替代...为什么我不得不看到更新的答案吗? :) –

+1

我总是不喜欢InstanceOf的语法,为了避免它,几乎值得在'object'上使用这个扩展方法。 – demoncodemonkey

12

你可以做多件事情,要看具体情况:

  • 使用Type.IsAssignableFrom(Type)如果你所得到的是两个类型的实例。如果您有权访问要比较的实例,请使用Type.IsInstanceOf(object instance)
  • 喜欢使用泛型:

    public bool IsOfType<T>() 
    { 
        return this._item is T; 
    } 
    
+2

我忘记了Type.IsInstanceOf。卫生署!将编辑我的答案与一个完整的例子... –

+0

它实际上被称为'IsInstanceOfType',不只是'IsInstanceOf'。 –

相关问题