将子项附加到父泛型方法

Posted

技术标签:

【中文标题】将子项附加到父泛型方法【英文标题】:Attach Children to parent generic method 【发布时间】:2011-12-16 16:18:36 【问题描述】:

每个父对象都有一个 Id 每个子对象都有一个属性 ParentId,它标识一个唯一的父对象,例如 child.ParentId == parent.Id 每个父对象都有属性 Children

此方法将匹配 parent.Id == child.ParentId 的孩子附加到每个父母 Children 属性

private void AttachChildrenToParent(IEnumerable<dynamic> parents, 
                                           IEnumerable<dynamic> children)

    parents.GroupJoin(
        children,
        p => p.Id,
        c => c.ParentId,
        (p, cn) => new  Parent = p, Children = cn )
        .ToList().ForEach(x => x.Parent.Children = x.Children);

我的问题:

我实际上没有属性名称为“Parent”“Children”的对象,而是我有各种显示子父关系的属性。所以我需要一个不编码属性名称的通用方法,并且我想为此调用这样的方法。

谁能帮助疲惫的大脑解决这个问题?

【问题讨论】:

【参考方案1】:

我假设在调用这个函数时你知道父/子关系属性是什么。

那么我建议你使用委托(实际上是 lambdas)来解决这个问题。这是我将如何做到的。您可能需要修改代码才能使其正常工作(我尚未对其进行测试),但希望它能够帮助您找到解决方案。

public delegate Guid GetProperty<T>(T obj);
        public delegate void AttachChildren<TParent, TChild>(TParent parent, IEnumerable<TChild> children);

        private void AttachChildrenToParent<TParent, TChild>(IEnumerable<TParent> parents, IEnumerable<TChild> children, GetProperty<TParent> getID, 
            GetProperty<TChild> getParentID, AttachChildren<TParent, TChild> attachObjects)
        
            parents.GroupJoin(
           children,
           p => getID(p),
           c => getParentID(c),
           (p, cn) => new  Parent = p, Children = cn )
           .ToList().ForEach(x => attachObjects(x.Parent, x.Children)); 

        

        private class Class1  public Guid ID  get; set;  public IEnumerable<Class2> Children  get; set;  
        private class Class2  public Guid ID  get; set;  public Guid ParentID  get; set;  
        private void test()
        
            IEnumerable<Class1> lst1 = new List<Class1>();
            IEnumerable<Class2> lst2 = new List<Class2>();
            AttachChildrenToParent<Class1, Class2>(lst1, lst2, x => x.ID, x => x.ParentID, (x, y) => x.Children = y);
        

【讨论】:

以上是关于将子项附加到父泛型方法的主要内容,如果未能解决你的问题,请参考以下文章

java8泛型

父类通过泛型获得子类Class类型 以及Type体系

8.4 泛型方法

泛型之泛型方法

JAVA——泛型类和泛型方法(静态方法泛型)

java 泛型