Ada*_*331 31 c# collections dictionary
我有一个方法可以返回曾参与某些项目的技术人员组,例如:
project 1 | John
project 1 | Tim
project 2 | John
project 2 | Dave
Run Code Online (Sandbox Code Playgroud)
我最初尝试创建一个字典,这通常是我的键值对的集合,但在这种情况下我无法使用它,因为我不能有一个重复的键(项目).我可以使用哪种替代方案?
我唯一的想法是创造一个Dictionary<Project, List<Technicians>>但是有更容易的东西吗?
Tig*_*ran 44
在您的情况下,相同的键与多个值相关,因此标准字典不适合.你可以声明它Dictionary<Key, List<Values>>.
但是,你也可以使用:
Lookup类,是
表示每个映射到一个或多个值的键集合.
为此,您需要3.5及更多的框架.
Gre*_*rdt 13
您需要的是一个Project和一个或多个技术人员之间的关系:
public class Project
{
public ICollection<Technician> Technicians { get; set; }
}
var project = new Project();
project.Technicians = new List<Technician>()
{
new Technician(),
new Technician()
};
Run Code Online (Sandbox Code Playgroud)
你的物体应该反映现实生活中的关系.
作为旁注,您可能有兴趣阅读有关域驱动设计的内容.
public void LoadTechnicians(Project project)
{
List<Technician> techs = new List<Technician>();
// query the database and map Technician objects
// Set the "Technicians" property
project.Technicians = techs;
}
Run Code Online (Sandbox Code Playgroud)
svi*_*ick 12
有从MS实验NuGet包包含MultiValueDictionary.
基本上,它就像是Dictionary<Project, List<Technicians>>,除了你List每次访问它时都不必重复所有逻辑来管理它.
我认为您的解决方案没有任何问题。毕竟,您可以按项目轻松访问所有团队成员。但是,您也可以尝试List<KeyValuePair<Project, Technician>>. 您保持键值关系,但不受不重复键的限制。比你现在拥有的要简单得多吗?取决于用例。
或者,您可以将此结构隐藏在自定义集合实现之后。