私はDataItem
クラスのコレクションを持っています。コレクション内の循環依存関係を見つけるC#
のDataItem:Property
RefItem
店が同じコレクションである可能性がありDataItem
へのREF。
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;
}
私のコレクションに循環依存性があるかどうかを確認するアルゴリズムをバリデーションメソッドで確認します。以下は私にとって無効なデータです。 item3が再びitem1によってポイントされるとき。 ITEM1またはクラスのREF項目バック指している場合の他の可能な組み合わせのアイテムがItem1-> ITEM2、item2-> ITEM3、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);
>。検証メソッドがfalseを返すようにしたい。
これは循環依存関係の問題ですが、C#でこれを行うための具体的なアルゴリズムが見つかりませんでした。
既存の参照を追跡する、すべての参照を通過できませんでしたか?既に参照している場合は新しい参照があれば、それは円形です。 –