14

我正在尝试找到以下替代方案,以便我可以利用is运营商。

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

类似于以下内容,无法编译。

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

2 回答 2

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);
}
于 2013-07-24T07:16:18.020 回答
12

您可以根据上下文执行多项操作:

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

    public bool IsOfType<T>()
    {
        return this._item is T;
    }
    
于 2013-07-24T07:19:43.330 回答