Однако есть некоторая проблема с этой идеей, поскольку каждый объект (и, действительно, каждый тип) имеет общий базовый класс Object. Вам нужно определить, как далеко вы хотите пройти по цепочке наследования (являются ли они одинаковыми или имеют одного и того же непосредственного родителя, или один является непосредственным родителем другого, и т. Д.) И выполнить проверяет таким образом. IsAssignableFrom
полезно для определения совместимости типов между собой, но не позволяет полностью установить, имеют ли они одного и того же родителя (если это то, что вам нужно).
Если ваши строгие критерии таковы, что функция должна возвращать true, если ...
- Типы идентичны
- Один тип является родителем (непосредственным или иным образом) другого
- Оба типа имеют одного и того же непосредственного родителя
Вы можете использовать
private bool AreSame(Type a, Type b)
{
if(a == b) return true; // Either both are null or they are the same type
if(a == null || b == null) return false;
if(a.IsSubclassOf(b) || b.IsSubclassOf(a)) return true; // One inherits from the other
return a.BaseType == b.BaseType; // They have the same immediate parent
}