C# - Get 和 Set 访问器中的树/递归?

标签 c# recursion tree accessor

我有一棵树( List<T> ),其中包含许多 ItemType类(参见下面的代码);该类具有属性 OverrideDiscount (可能是 null ,表示使用 DefaultDiscount (可能是 null ,表示使用父级 ItemTypeCalculatedDiscount ))

所以你看,我需要递归树(顺便说一句是 List<ItemType> )来获取父级的 CalculatedDiscount 。 ,因为这可能是 null ,这意味着您需要获取 parent 的 parent 的 CalculatedDiscount等等...

将其代码放在 Get 中是不是一个坏主意?访问器?

你会如何处理?

作为旁注,所有这些数据都来自 SqlDataReader从数据库中(无特定顺序),然​​后是 Children属性列表通过循环遍历树并添加到Children来填充。酌情列出。因此,直到Set之后, parent 才意识到 child 的存在。访问器已被调用,排除了在 Set 中放置任何有用的内容。访问器(例如,在 CalculatedDiscount 访问器中设置所有子项的 Set)。除非我错过了其他一些方法(很可能,递归有时会烧坏我的大脑)。

提前致谢

到目前为止的类(class):

    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?
                    }
                }
            }
        }
    }

最佳答案

我将存储完整的对象,而不是只存储父项的 ID。这将使事情变得更加容易(我还将这些公共(public)变量转换为属性):

public class ItemType
{
    public int Id { get; set; }
    public ItemType Parent { get; set; }
    public List<ItemType> Children; { get; set; }

    public double? DefaultDiscount { get; set; }
    public double? OverridenDiscount { get; set; }

    public double CalculatedDiscount
    {
        get
        {
            return (double)(OverridenDiscount ?? 
                            DefaultDiscount ?? 
                            (Parent != null ? Parent.CalculatedDiscount : 0));
        }
    }
}

关于C# - Get 和 Set 访问器中的树/递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092183/

相关文章:

java - 返回递归中的数字集

c - 递归函数求和两个其他之间的数字

haskell - 给出一棵树,其中每个节点的值包含子节点的总和

c++ - 2D线段树,矩形之和

c# - 查找要在没有命名空间或程序集的情况下按名称实例化的类? (。网)

c# - 使用 MVC 时实体模型的命名约定

c# - 递归类的最佳实践

python - 通过迭代树来解码比特序列

c# - 这是使用 Web 服务激活串行 key 的好方法吗?

c# - 在 ASP.NET 4.5 中的 AutoCompleteExtender 中添加滚动条