我想创建一个存储用户组的集合。用户可以是多个组的成员,组可以嵌套,选择的组应该返回不同的IEnumerable <user
&gt;
我当然可以从头开始使用标准列表<T
&gt;,词典&lt; T,
U&gt;等等集合,但是有没有内置的集合已经暴露了很多这种行为?
谢谢!
答案 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,如果可以的话就去。
否则......我有时会通过多个词典和列表完成此操作。你有一个组词典,每个组都是一个列表。然后另一个字典来存储用户的某些键的用户。每个用户都可以以这种方式存在于多个组中。