集合是否可行和/或最佳方式?C#.Net 3.5

集合是否可行和/或最佳方式?C#.Net 3.5,c#,.net,collections,C#,.net,Collections,我已经为仪表板项创建了一个类,该类将保存诸如仪表板上的位置、说明等信息。我目前正在使用一对集合来保存“库”中包含的仪表板项以及仪表板上显示的项目。我被要求制作这个多选项卡的仪表板,我的第一个倾向是为每个选项卡制作一个新的集合。为此,我需要某种类型的数组或集合,在向仪表板添加更多选项卡时,可以向其中添加许多仪表板项集合 这可能吗?如果可能的话,我可以为这样一个集合的声明获得一点代码剪贴吗?我考虑过使用一个带有变量的集合来显示项目将显示在哪个选项卡中。。。但是,用于管理屏幕和库之间的仪表板项移动的显

我已经为仪表板项创建了一个类,该类将保存诸如仪表板上的位置、说明等信息。我目前正在使用一对集合来保存“库”中包含的仪表板项以及仪表板上显示的项目。我被要求制作这个多选项卡的仪表板,我的第一个倾向是为每个选项卡制作一个新的集合。为此,我需要某种类型的数组或集合,在向仪表板添加更多选项卡时,可以向其中添加许多仪表板项集合

这可能吗?如果可能的话,我可以为这样一个集合的声明获得一点代码剪贴吗?我考虑过使用一个带有变量的集合来显示项目将显示在哪个选项卡中。。。但是,用于管理屏幕和库之间的仪表板项移动的显示和例程当前需要这些单独的集合


编辑:谢谢你的回答。虽然我确实觉得它们都很有趣,但我相信我会选择James solution,并将其标记为公认的答案。

为什么不创建一个包含第二个集合和任何以前的信息的类,然后只创建这些项目的集合?

ListListofListOfPlacements=new List();
List< List<Placement>> ListofListOfPlacements = new List< List<Placement>> ();

List<Placement> dashboard1 = new List<Placement>();
List<Placement> dashboard2 = new List<Placement>();
List<Placement> dashboard3 = new List<Placement>();
List<Placement> dashboard4 = new List<Placement>();

ListofListOfPlacements.Add(dashboard1);
ListofListOfPlacements.Add(dashboard2);
ListofListOfPlacements.Add(dashboard3);
ListofListOfPlacements.Add(dashboard4);
列表仪表板1=新列表(); 列表仪表板2=新列表(); 列表仪表板3=新列表(); 列表仪表板4=新列表(); ListofListOfPlacements.Add(仪表板1); ListofListOfPlacements.Add(仪表板2); ListofListOfPlacements.Add(仪表板3); ListofListOfPlacements.Add(仪表板4);
为什么不将仪表板项目集合放在tabpage类中

像这样:

public class DashboardTabPage : TabPage
{
    public List<DashboardItem> DashboardItems { get; set; }

    public DashboardTabPage() : this (new List<DashboardItem>())
    {

    }

    public DashboardTabPage(List<DashboardItem> items) :base ("Dashboard Thing")
    {
        DashboardItems = items;
    }

}

既然你说的是标签,我觉得你想要更接近于标签名称的字典,每个标签上都有一组项目。NET 3.5添加了
ILookup
界面:

        ILookup<string, Foo> items = null; //TODO
        foreach (Foo foo in items["SomeTab"])
        {
            Console.WriteLine(foo.Bar);
        }
ILookup项=null//待办事项
foreach(Foo-Foo在items[“SomeTab”]中)
{
控制台写入线(foo.Bar);
}
请注意,MS实现是不可变的-您不能在创建后对其进行编辑;但是,我在中编写了一个
EditableLookup
,它允许您更有效地工作(就像常规的.NET集合):

var items=neweditablelookup();
添加(“SomeTab”,newfoo{Bar=“abc”});
添加(“其他选项卡”,新Foo{Bar=“def”});
添加(“SomeTab”,newfoo{Bar=“ghi”});
foreach(Foo-Foo在items[“SomeTab”]中)
{//打印“abc”和“ghi”
控制台写入线(foo.Bar);
}
如果没有
EditableLookup
,则需要通过
Enumerable.ToLookup
扩展方法构建查找


如果这其中的任何部分听起来像是一个选项,我可以添加更多细节…

我认为您应该使用组合,如下所示

每个用户仪表板主页(具有多个选项卡)对象,包含仪表板对象列表,包含定义了各种操作的仪表板项目对象列表。同样,dashboard项可以是一个usercontrol,它定义了所有可能的事件,这些事件在dashboard项对象中处理和/或留给dashboard UI对象处理,该对象将与各个dashboard对象一起使用


如果您打算遵循SOA和可重用的基于组件的体系结构,我想这将更易于管理。

您也可以使用这样的元组:
List

例如:

var list=新列表
{
(“鲍勃”,新[]{“查理”,“玛丽”}),
(“罗伯特”,新[…]{“约翰”、“杰夫”、“奥利弗”}),
};

我同意。在某个时刻,您可能需要为每个“选项卡”提供更多的信息,而不是上面有什么对象。
        ILookup<string, Foo> items = null; //TODO
        foreach (Foo foo in items["SomeTab"])
        {
            Console.WriteLine(foo.Bar);
        }
        var items = new EditableLookup<string, Foo>();
        items.Add("SomeTab", new Foo { Bar = "abc" });
        items.Add("AnotherTab", new Foo { Bar = "def" });
        items.Add("SomeTab", new Foo { Bar = "ghi" });
        foreach (Foo foo in items["SomeTab"])
        { // prints "abc" and "ghi"
            Console.WriteLine(foo.Bar);
        }