using System.Collections.Generic;
public int ID { get; set; }
public string Name { get; set; }
public DataItem RefItem { get; set; }
public static bool Check(DataItem item)
var chain = new Dictionary<DataItem, DataItem>();
ProcessNodes(chain, item);
catch (ArgumentException)
private static void ProcessNodes(Dictionary<DataItem, DataItem> chain, DataItem item)
if (item.RefItem != null)
chain.Add(item.RefItem, null);
ProcessNodes(chain, item.RefItem);
public static bool ValidateDataItems(List<DataItem> items)
foreach(var item in items)
public static void Main()
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 };
Console.WriteLine(Checker.Check(item1));
Console.WriteLine(Checker.Check(item1));
Console.WriteLine(Checker.ValidateDataItems(new List<DataItem>{item1, item2, item3}) ? "items is OK" : "One or more items have dependency");