我有一个小实体“类别”
Id
Name
Parent_id
我想用项目的所有父项的字符串覆盖ToString(),我不知道该项目有多少父母。
Example: (pseudo code)
Item1 => Id = 1, Name = Computers, Parent_id = null
Item2 => Id = 2, Name = Laptops , Parent_id = 1
Item3 => Id = 3, Name = Acer , Parent_id = 2
在Item3.ToString()的输出上,我希望结果为"Computers > Laptops > Acer"
。
我需要它是动态的,所以我不知道应该采取多少步骤...
任何新鲜的idéas?
答案 0 :(得分:0)
你需要递归地执行此操作:
public overrides string ToString()
{
string build = parent.ToString();
if (!String.IsNullOrEmpty(build)) build += " > ";
build += Name;
return build
}
上面的内容应该这样做 - 每个实体将在其父级上调用ToString,以便获得层次结构中所有实体的列表。无论层次结构深入(在合理范围内),这都会有效。
注意:您需要引用父级来执行此操作,您可以使用属性,也可以使用已经获得的parentid属性查看实体。
答案 1 :(得分:0)
首先,您需要将父项本身(不仅仅是ID)添加到每个项目,然后通过简单的循环就可以轻松实现:
public override string ToString()
{
List<string> names = new List<string>();
names.Add(this.Name);
Category parent = this.Parent;
while (parent != null)
{
names.Add(parent.Name);
parent = parent.Parent;
}
names.Reverse();
return string.Join(" > ", names);
}
答案 2 :(得分:0)
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public Category Parent { get; set; }
public override string ToString()
{
return Parent == null
? Name
: string.Format("{0} > {1}", Parent, Name);
}
}
用法:
item1 = new Category{Id = 1, Name = "Computers"};
item2 = new Category{Id = 2, Name = "Laptops", Parent = item1};
item3 = new Category{Id = 3, Name = "Acer", Parent = item2};
Debug.Print(item3.ToString());
Debug.Print(item2.ToString());
Debug.Print(item1.ToString());
结果:
Computers > Laptops > Acer
Computers > Laptops
Computers