Как проверить, является ли тип подтипом или типом объекта?
чтобы проверить, является ли тип подклассом другого типа В C#, это легко:
typeof (SubClass).IsSubclassOf(typeof (BaseClass)); // returns true
однако, это не удастся:
typeof (BaseClass).IsSubclassOf(typeof (BaseClass)); // returns false
есть ли способ проверить, является ли тип подклассом или самим базовым классом, без использования OR оператор или с помощью метода расширения?
5 ответов:
видимо, нет.
вот варианты:
- использовать тип.IsSubclassOf
- использовать тип.IsAssignableFrom
isиasтип.IsSubclassOf
как вы уже выяснили, это не будет работать, если два типа одинаковы, вот пример LINQPad
вы должны попробовать использовать тип.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; } } }Я чувствую, что я мог бы быть немного наивным здесь, так что любая обратная связь будет приветствоваться.