Как проверить, является ли тип подтипом или типом объекта?


чтобы проверить, является ли тип подклассом другого типа В C#, это легко:

typeof (SubClass).IsSubclassOf(typeof (BaseClass)); // returns true

однако, это не удастся:

typeof (BaseClass).IsSubclassOf(typeof (BaseClass)); // returns false

есть ли способ проверить, является ли тип подклассом или самим базовым классом, без использования OR оператор или с помощью метода расширения?

5 281

5 ответов:

видимо, нет.

вот варианты:

тип.IsSubclassOf

как вы уже выяснили, это не будет работать, если два типа одинаковы, вот пример LINQPad

typeof(BaseClass).IsAssignableFrom(unknownType);

вы должны попробовать использовать тип.IsAssignableFrom вместо.

если вы пытаетесь сделать это в проекте Xamarin Forms PCL, вышеуказанные решения используют IsAssignableFrom выдает ошибку:

ошибка: 'Type' не содержит определения для 'IsAssignableFrom' и не метод расширения 'IsAssignableFrom', принимающий первый аргумент тип 'Type' может быть найден (отсутствует директива using или ссылка на сборку?)

, потому что IsAssignableFrom просит

я публикую этот ответ с надеждой, что кто-то поделится со мной, если и почему это было бы плохой идеей. В моем приложении у меня есть свойство типа, которое я хочу проверить, чтобы убедиться, что это typeof(A) или typeof (B), где B-любой класс, производный от A. Поэтому мой код:

public class A
{
}

public class B : A
{
}

public class MyClass
{
    private Type _helperType;
    public Type HelperType
    {
        get { return _helperType; }
        set 
        {
            var testInstance = (A)Activator.CreateInstance(value);
            if (testInstance==null)
                throw new InvalidCastException("HelperType must be derived from A");
            _helperType = value;
        }
    }
}

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