2009-07-29 43 views
0

我想制作一个存储用户组的集合。用户可以是多个组的成员,组可以嵌套,选择的组应该返回不同的IEnumerable>>。哪些集合存储用户组?

我可以从课程从头开始使用标准的列表<T>写这篇文章,字典< T, U>等收藏品,但有一个已经暴露了很多的此行为的内置集合?

谢谢!

回答

2

我会做这样的事情:

using System; 
using System.Collections.Generic; 

class Program 
{ 
    static void Main() 
    { 
     List<User> users = new List<User> 
     { 
      // use a List<T> to hold the users themselves 
     }; 
    } 
} 

class Group 
{ 
    public Group NestedGroup { get; set; } 
} 

class User 
{ 
    // Store the groups in a HashSet<T> to keep 
    // a distinct list. 
    HashSet<Group> groups; 

    public IEnumerable<Group> Groups 
    { 
     get { return groups; } 
    } 
} 

使用List<T>持有自己应该没事的用户。请注意0​​类型的Groups属性作为IEnumerable<Group>公开,但在内部实现为HashSet<Group>,以允许您保留一个清晰的列表。

0

我会想一个通用的List<T>会工作(其中T是持有您的用户的类)。

+0

我认为他需要更多的功能,基本列表 – 2009-07-29 19:22:01

+0

提供了什么我会认为列表将持有用户和用户类将暴露属性是一个词典或HashSet组?似乎没有什么不寻常的东西? (但是我可能会错过一些东西 - 我经常这样做) – 2009-07-29 19:24:20

0

我认为使用List<T>可以保存这些信息。你可以让团体有一个父母组和一个儿童组的列表,每个组包含一个成员列表或类似的东西。

就退出IEnumerable<User>而言 - 这应该可以使用Enumerable.SelectMany来实现。看看那里的MSDN示例 - 它们与宠物和所有者有类似的事情,其中​​有多个元素跨越多个集合。

0

它看起来像你需要一个很好的旧的关系数据库。抛出SQLite,如果可以的话。

否则...我有时通过多个字典和列表完成了这项工作。你有一个组词典,每个组都是一个列表。然后是另一个字典,通过某种关键字来存储用户。每个用户可以以这种方式存在于多个组中。