有没有一种方法可以将参数传递给Is运算符

本文关键字:参数传递 运算符 Is 方法 一种 有没有 | 更新日期: 2023-09-27 18:24:32

我正试图找到以下选项的替代方案,以便利用is运算符。

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

类似于以下内容的内容,但不可编译。

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

有没有一种方法可以将参数传递给Is运算符

我想您正在寻找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);
}

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

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

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