C# 填充多维数组

C# 填充多维数组,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我有这样的硬编码: private string[,] m_RolesForUser = new string[,] { {"John","President,Chair"}, {"Lisa","Chair"}, {"Mike","Executive,President,Chair"}, }; 如果数据源由角色表和用户表组成,我将如何填充此数组。一个用户可以有多个角色。不确定用什么语法来构造代码来支持这样的东西。为什么不在这里使用对象列表的字典?C#是一种面向对

我有这样的硬编码:

private string[,] m_RolesForUser = new string[,] {
    {"John","President,Chair"},
    {"Lisa","Chair"},    
    {"Mike","Executive,President,Chair"},
};

如果数据源由角色表和用户表组成,我将如何填充此数组。一个用户可以有多个角色。不确定用什么语法来构造代码来支持这样的东西。

为什么不在这里使用对象列表的
字典?C#是一种面向对象语言,因此更倾向于使用对象。下面的示例使用字符串来适合您的示例,但您甚至可以创建一个
人员
类和一个
角色
类,并将
人员
绑定到一个
角色
列表

private Dictionary<string, List<string>> roles = new Dictionary
    {
        {"John", new List{"President","Chair"}},
        {"Lisa", new List{"Chair"}},    
        {"Mike", new List{"Executive","President","Chair"}}
    }

为什么不在这里使用对象列表的
字典
?C#是一种面向对象语言,因此更倾向于使用对象。下面的示例使用字符串来适合您的示例,但您甚至可以创建一个
人员
类和一个
角色
类,并将
人员
绑定到一个
角色
列表

private Dictionary<string, List<string>> roles = new Dictionary
    {
        {"John", new List{"President","Chair"}},
        {"Lisa", new List{"Chair"}},    
        {"Mike", new List{"Executive","President","Chair"}}
    }

对于数据结构,您有不同的选项。一个想法是为用户创建一个类,并将角色存储为每个用户的列表

public class User
{
    public User ()
    {
        Roles = new List<string>();
    }

    public int ID { get; set; }
    public string Name { get; set; }

    public List<string> Roles { get; private set; }
}

(当然,您会使用合适的连接类型、读卡器类型等)。

您有不同的数据结构选项。一个想法是为用户创建一个类,并将角色存储为每个用户的列表

public class User
{
    public User ()
    {
        Roles = new List<string>();
    }

    public int ID { get; set; }
    public string Name { get; set; }

    public List<string> Roles { get; private set; }
}

(当然,您会使用合适的连接类型、读卡器类型等。)

一般来说,如果您的语言是C#,多维数组通常是问题的一部分,而不是解决方案的一部分。遗憾的是,他们的支持非常缺乏。请不要在标题前加上“C#”之类的前缀。这就是标签的用途。我建议使用一些自制的结构或其他复杂的数据结构,如列表或数组的词汇表。我更喜欢有一个完整的OO视图,但这只是我的观点。一般来说,如果你的语言是C#,多维数组往往是问题的一部分,而不是解决方案的一部分。遗憾的是,他们的支持非常缺乏。请不要在标题前加上“C#”之类的前缀。这就是标签的用途。我建议使用一些自制的结构或其他复杂的数据结构,如列表或数组的词汇表。我更喜欢有一个完整的OO视图,但那只是我的意见,谢谢。你能告诉我,我将如何阅读或反复阅读字典来查找“Lisa”的角色吗?我刚刚创建了一个示例片段,介绍了如何查找角色。谢谢。你能告诉我,我将如何阅读或反复阅读字典来查找“Lisa”的角色吗?我刚刚创建了一个示例片段,介绍了如何查找角色。
using (OleDbConnection cnn = new OleDbConnection(ConnectionString)) {
    string query = "SELECT ... FROM users LEFT JOIN user_roles ON ... ORDER BY UserID";
    using (OleDbCommand cmd = new OleDbCommand(query, cnn)) {
        cnn.Open();
        using (OleDbDataReader reader = cmd.ExecuteReader()) {
            int userIdOrdinal = reader.GetOrdinal("UserID");
            int userNameOrdinal = reader.GetOrdinal("UserName");
            int roleIdOrdinal = reader.GetOrdinal("RoleID");
            int roleNameOrdinal = reader.GetOrdinal("RoleName");
            User user = null;
            while (reader.Read()) {
                int userID = reader.GetInt32(userIdOrdinal);
                if (user == null || user.ID != userID) {
                    user = new User { ID = userID };
                    user.Name =  reader.GetString(userNameOrdinal);
                    _users.Add(user);
                }
                if (!reader.IsDBNull(roleIdOrdinal)) {
                    user.Roles.Add(reader.GetString(roleNameOrdinal);
                }
            }
        }
    }
}