我遇到一种情况,我需要查看两个 View 模型是否源自同一基础。
型号:
class BaseModel;
class DerivedModel1 : BaseModel;
class DerivedModel2 : BaseModel;
class DerivedModel3 : DerivedModel2;
鉴于此模型,我想知道 DerivedModel1
和 DerivedModel3
何时都来自同一个 BaseModel
。不能保证这些类位于同一个程序集中,并且可能存在更深的层次结构。也不能保证我知道 BaseModel 是什么。
我已经尝试过 DerivedModel1.GetType().IsAssignableFrom(DerivedModel3.GetType());
但正如您所知,由于层次结构的深度,这不会起作用。
有什么想法吗?
最佳答案
你可以这样检查:
bool DoBothDeriveFrom<TBase, T1, T2>()
{
return typeof(T1).IsSubclassOf(typeof(TBase))
&& typeof(T2).IsSubclassOf(typeof(TBase));
}
IsAssignableFrom
也可以工作,如果您提供公共(public)基础,层次结构深度与此处无关。
如果 TBase
未知,您可以按照 InBetween 的建议爬上两个类的继承树。然后比较两棵树,检查它们是否共享除 object
之外的任何共同类型。它看起来可能像这样:
public bool HaveCommonRoot<T1, T2>()
{
var tree1 = InheritanceTree<T1>();
var tree2 = InheritanceTree<T2>();
return tree1.Intersect(tree2).Any();
}
private IEnumerable<Type> InheritanceTree<T>()
{
var type = typeof(T);
yield return type;
while (type.BaseType != typeof(object))
{
type = type.BaseType;
yield return type;
}
}
关于c# - 需要检查两个 View 模型的类型以查看它们是否源自同一基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6915932/