Есть ли способ передать аргумент оператору is? - программирование
Подтвердить что ты не робот

Есть ли способ передать аргумент оператору is?

Я пытаюсь найти альтернативу следующему, чтобы я мог воспользоваться оператором is.

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

Нечто похожее на следующее, которое не компилируется.

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

Ответ 1

Я думаю, что вы ищете Type.IsAssignableFrom:

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

Или, если вы можете сделать метод общим, более простым, поскольку вы можете использовать is с параметром типа:

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

EDIT: Как отмечено в ответе Вима, также Type.IsInstanceOf, что упрощает не общий метод:

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

Ответ 2

Вы можете делать несколько вещей, в зависимости от контекста:

  • Используйте Type.IsAssignableFrom(Type), если у вас есть два экземпляра типа.
  • Используйте Type.IsInstanceOf(object instance), если у вас есть доступ к экземпляру для сравнения.
  • Используйте дженерики вроде:

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