我有一个对象组织单位,我在同一个对象中有一个自引用
public class OrganizationUnit: IOrganizationUnit {
private string fName;
public string Name {
get { return fName; }
set { SetPropertyValue("Name", ref fName, (string) value); }
}
private OrganizationUnit fManagedBy;
public IOrganizationUnit ManagedBy {
get { return fManagedBy; }
set {
SetPropertyValue("ManagedBy", ref fManagedBy, (OrganizationUnit)value);
}
}
}
我需要一种方法,如果它发现第三级中的子组织单元引用了父组织单元,或者说是循环父组织,则会引发异常。
答案 0 :(得分:3)
浏览图表并保留受访节点的历史记录。如果再次访问节点,则检测到一个周期:
void CheckCycles(IOrganizationUnit unit)
{
var visited = new HashSet<IOrganizationUnit>();
for (var current = unit; current != null; current = current.ManagedBy)
{
if (!visited.Add(current))
{
throw new Exception(); // cycle detected
}
}
}