【发布时间】:2011-02-23 22:35:07
【问题描述】:
我有一棵树(List<T>),其中包含许多 ItemType 类(请参见下面的代码);该类具有属性OverrideDiscount(可以是null,表示使用DefaultDiscount(可以是null,表示使用父ItemType的CalculatedDiscount ))
所以你看我需要递归树(顺便说一下是List<ItemType>)来得到父级的CalculatedDiscount,因为那可能是null,这意味着你需要得到父级的父级CalculatedDiscount等等……
将代码放在Get 访问器中是不是一个坏主意?
你会怎么处理?
顺便说一句,所有这些数据都来自数据库中的SqlDataReader,没有特定的顺序,然后通过循环遍历树并添加到Children 列表中来填充Children 属性列表合适的。因此,在调用 Set 访问器之后,父母才知道孩子,排除在 Set 访问器中放置任何有用的东西(例如,将所有孩子的 CalculatedDiscount 设置在 Set 访问器中)。除非我错过了其他一些方法(很有可能,递归有时会伤到我的大脑)。
提前致谢
目前的课程:
public class ItemType
{
public int ID;
public int? ParentID;
public List<ItemType> Children;
public double? DefaultDiscount;
public double? OverrideDiscount;
public double CalculatedDiscount
{
get
{
if (OverrideDiscount != null)
{
return (double)OverrideDiscount; //+ Autospec qty
}
else
{
if (DefaultDiscount != null)
{
return (double)DefaultDiscount;
}
else
{
//I need to get this ItemType's parent's discount
//here by recursing up the tree...is this a bad idea?
}
}
}
}
}
【问题讨论】:
-
假设获得对父级的引用相对较快,并且没有循环风险,我看不出有什么不好的原因。
标签: c# recursion tree accessor