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);
}
}
}
}
}