Как проверить, является ли тип подтипом или типом объекта?
чтобы проверить, является ли тип подклассом другого типа В 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; } } }
Я чувствую, что я мог бы быть немного наивным здесь, так что любая обратная связь будет приветствоваться.