在c#中存储我的列表的数据类型

时间:2012-04-09 18:08:00

标签: c#-4.0

我有两个小组,一个是设计师,一个是经理。 每位设计师都将其经理的ID存储在他的个人资料中。

我想循环查看经理列表,让所有设计师为他们工作。

我的问题是需要以特殊方式访问设计人员资料数据,我不想创建一个完整的笛卡尔积。所以我想的是创建一个数据类型来存储用户名(字符串)和经理ID(int),我可以访问并快速查找。

您建议哪种数据类型用于此类查找功能?

编辑:我无法更改任何类的结构。不是经理而不是设计师。我想要SomeTypeLikeDictionary<int, string>的内容,其中int是经理的ID,字符串是设计者的全名。我想把它放在一个适合查找的集合类型中。示例:现在我正在寻找为经理ID 10工作的所有设计师的名字。

2 个答案:

答案 0 :(得分:0)

根据上述评论,我将假设以下内容:

public class Manager {
    public Int32 ManagerId { get; set; }
    public String ManagerName { get; set; }
}

public class Designer {
    public Int32 DesignerId { get; set; }
    public Int32 ManagerId { get; set; }
    public String DesignerName { get; set; }
}

假设给定设计器的管理器是静态的,我会修改管理器类:

public class Manager {
    private List<Designer> _designers = new List<Designer>();
    public Int32 ManagerId { get; set; }
    public String ManagerName { get; set; }
    public IList<Designer> Designers { get { return _designers; } }
}

然后将经理存储在KeyedCollection的子类中:

using System.Collections.ObjectModel;
public class ManagerList : KeyedCollection<Int32, Manager> {
    protected override int GetKeyForItem(Manager item)
    {
        return item.ManagerId;
    }
}

// Somewhere else
var managerList = new ManagerList();
var someManager = new Manager { ManagerId = 1, ManagerName="Bill Lundberg" };
managerList.Add(someManager);

foreach (var designer in myDesigners)
    managerList[designer.ManagerId].Designers.Add(designer);

当然,所有这些都没有考虑到设计师管理方面的任何变化。这就是为什么我问: - )

答案 1 :(得分:0)

Chris Shain的假设类型:

public class Designer { 
    public Int32 DesignerId { get; set; } 
    public Int32 ManagerId { get; set; } 
    public String DesignerName { get; set; } 
} 

并且,假设您有一个代表所有设计师的designers集合,您可以使用linq:

Dictionary<int, IEnumerable<Designer>> designerLookup = designers
    .GroupBy(designer => designer.ManagerId)
    .ToDictionary(group => group.Key);