在集合c#中查找循环依赖项

时间:2016-03-28 09:29:37

标签: c# .net

我有一个DataItem类的集合。

DataItem: Property RefItem将ref存储为可能属于同一集合的DataItem

public class DataItem
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DataItem RefItem { get; set; }
}

收集:

 private List<DataItem> dataitems;

    public List<DataItem> DataItems
    {
        get { return dataitems; }
        set { dataitems = value; }
    }

现在我有两种方法可以在集合中添加数据并验证集合中的数据。

 public void AddItem(DataItem item)
    {
        DataItems.Add(item);
    }

    public bool ValidateDataItems()
    {
        //Logic for circular reference
        //
        return true;
    }

我想在validate方法中使用一个算法来检查我的集合中是否存在任何循环依赖。例如。以下是我的无效数据。由于item1再次指向item3。

       var item1 = new DataItem() {ID=1,Name="First Item",RefItem =null};
        var item2 = new DataItem() { ID = 1, Name = "First Item", RefItem = item1 };
        var item3 = new DataItem() { ID = 1, Name = "First Item", RefItem = item2 };
        item1.RefItem = item3;
        AddItem(item1);
        AddItem(item2);
        AddItem(item3);

如果将项目添加到集合中,例如Item1-&gt; item2,item2-&gt; item3,item3-&gt; item1或类的ref项指向的任何其他可能组合。我希望验证方法返回false。

这是一个循环依赖问题,但我在c#中找不到任何具体的算法。

1 个答案:

答案 0 :(得分:3)

尝试类似solution的内容:

show