哪些集合用于存储用户组?

时间:2009-07-29 19:17:02

标签: c# .net collections

我想创建一个存储用户组的集合。用户可以是多个组的成员,组可以嵌套,选择的组应该返回不同的IEnumerable <user&gt;

我当然可以从头开始使用标准列表<T&gt;,词典&lt; T, U&gt;等等集合,但是有没有内置的集合已经暴露了很多这种行为?

谢谢!

4 个答案:

答案 0 :(得分: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>来保持用户自己应该没问题。请注意,Groups类型的User属性公开为IEnumerable<Group>,但在内部实现为HashSet<Group>,以便您可以根据需要保留不同的列表。< / p>

答案 1 :(得分:0)

我会想到一个通用List<T>会起作用(其中T是保存用户的类)。

答案 2 :(得分:0)

我认为使用List<T>可以保存这些信息。您可以拥有包含父组和子组列表的组,以及包含成员列表或类似内容的每个组。

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

答案 3 :(得分:0)

看起来你需要一个好的旧关系数据库。扔进SQLite,如果可以的话就去。

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