有没有办法将参数传递给is运算符?

时间:2013-07-24 07:14:38

标签: c# generics

我正在尝试找到以下内容的替代方法,以便我可以利用is运算符。

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

类似于以下内容,不能编译。

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

2 个答案:

答案 0 :(得分: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使得非泛型方法更简单:

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

答案 1 :(得分:12)

根据具体情况,你可以做多件事:

  • 如果您拥有的是两个类型实例,请使用Type.IsAssignableFrom(Type)
  • 如果您有权要比较的实例,请使用Type.IsInstanceOf(object instance)
  • 使用如下的泛型:

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