C# 验证循环组织单元

C# 验证循环组织单元,c#,validation,methods,C#,Validation,Methods,我有一个对象组织单元,我在同一个对象中有一个对它的自引用 public class OrganizationUnit: IOrganizationUnit { private string fName; public string Name { get { return fName; } set { SetPropertyValue("Name", ref fName, (string) value); }

我有一个对象组织单元,我在同一个对象中有一个对它的自引用

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);
            }
        }


}
我需要一个方法,如果它发现第三级中的子组织单元正在引用父组织单元,或者说循环父组织,则该方法将引发异常

  • A是主B由A管理C不能由A管理

浏览图表并保存已访问节点的历史记录。如果再次访问节点,则检测到一个循环:

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
        }
    }
}
无效检查周期(IOR组织单位)
{
var=newhashset();
for(var current=unit;current!=null;current=current.ManagedBy)
{
如果(!已访问。添加(当前))
{
抛出新异常();//检测到循环
}
}
}

浏览图表并保存已访问节点的历史记录。如果再次访问节点,则检测到一个循环:

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
        }
    }
}
无效检查周期(IOR组织单位)
{
var=newhashset();
for(var current=unit;current!=null;current=current.ManagedBy)
{
如果(!已访问。添加(当前))
{
抛出新异常();//检测到循环
}
}
}