壁に頭をぶつけても、その日の1つになることもありますが、最も単純な作業でさえもほのめかします(これはその日の1つです!)。
だから私が持っているのはカテゴリーのリストです
CategoryID, CategoryName, ParentID, Lineage
1 Root Category, NULL, /1/
2 Child Category, 1, /1/2/
3 Grandchild, 2, /1/2/3
4 Second Root, NULL, /4/
5 Second Child 2, /1/2/5/
上記のすべての値に加えて、これを保持するクラスを作成しました
ICollection<Category> Children;
これでツリーが作成されます
Root Category
`-- Child category
| `-- Grandchild
`-- Second Child
Second Root
そこで、リネージュと要素を指定してツリーに新しいカテゴリを追加しようとしています。リネージュをキューに変換して、この関数にスローします。
public void AddToTree(ref Category parentCategory, Category newCategory, Queue<Guid>lineage)
{
Guid lastNode = lineage.Dequeue();
if(lastNode == newCategory.CategoryId)
{
parentCategory.Children.Add(newCategory);
return;
}
foreach (var category in parentCategory.Children)
{
if(category.CategoryId == lastNode)
{
this.AddToTree(ref category, newCategory, lineage);
}
}
}
今私が得ている2つの問題
自己参照はそれほど心配する必要はありませんが(再帰的に設計されています)、
foreach
ループ内のカテゴリはローカルでインスタンス化された変数であるため、参照によって作成してポインタとして使用することはできません。これよりも簡単な方法があるはずです!
どんなポインタも大いに受け取られるでしょう。