C# C语言中字典中的字典#
我正在创建一个字典,它有一个键作为字典。 这是两本词典的声明C# C语言中字典中的字典#,c#,C#,我正在创建一个字典,它有一个键作为字典。 这是两本词典的声明 Dictionary<Dictionary<Int64,string>, Int64> AccountTypeDic = new Dictionary<Dictionary<Int64, string>, Int64>(); Dictionary<Int64,string> IdName = new Dictionary<Int64,string>(); sq
Dictionary<Dictionary<Int64,string>, Int64> AccountTypeDic = new Dictionary<Dictionary<Int64, string>, Int64>();
Dictionary<Int64,string> IdName = new Dictionary<Int64,string>();
sqlDataReader具有所有字段ID、帐户名和序列码
请不要建议我使用其他数据结构。我只是想知道如何以这种方式处理它。看起来您正试图在此处反复添加相同的密钥:
while (sqlDataReader.Read())
{
IdName.Clear();
IdName.Add(Int64.Parse(sqlDataReader["ID"].ToString()),sqlDataReader["ACCOUNT_NAME"].ToString());
AccountTypeDic.Add(IdName, Int64.Parse(sqlDataReader["SEQUENCE_ID"].ToString()));
}
您的IdName
实例始终相同。因此,请确保有不同的实例作为键。基本上,IdName
字典应该在while循环中声明和实例化:
while (sqlDataReader.Read())
{
long id = sqlDataReader.GetInt64(sqlDataReader.GetOrdinal("ID"));
string accountName = sqlDataReader.GetString(sqlDataReader.GetOrdinal("ACCOUNT_NAME"));
long sequenceId = sqlDataReader.GetInt64(sqlDataReader.GetOrdinal("SEQUENCE_ID"));
var idName = new Dictionary<long, string>();
idName.Add(id, accountName);
// Make sure that here you don't have repetitions of idName
// or the next line will bomb with the exact same exception
AccountTypeDic.Add(idName, sequenceId);
}
while(sqlDataReader.Read())
{
long id=sqlDataReader.GetInt64(sqlDataReader.GetOrdinal(“id”);
string accountName=sqlDataReader.GetString(sqlDataReader.GetOrdinal(“帐户名称”));
long sequenceId=sqlDataReader.GetInt64(sqlDataReader.GetOrdinal(“序列ID”);
var idName=新字典();
添加(id,accountName);
//确保此处没有重复的idName
//否则下一行就会爆炸,只有一个例外
AccountTypeDic.Add(idName,sequenceId);
}
请不要建议我使用其他数据结构
当我们看到这件事的时候,每个人都会建议你这么做。我见过有人使用字典作为值,但字典作为另一个字典的键,哦,好吧。看起来您正试图在这里反复添加相同的键:
while (sqlDataReader.Read())
{
IdName.Clear();
IdName.Add(Int64.Parse(sqlDataReader["ID"].ToString()),sqlDataReader["ACCOUNT_NAME"].ToString());
AccountTypeDic.Add(IdName, Int64.Parse(sqlDataReader["SEQUENCE_ID"].ToString()));
}
您的IdName
实例始终相同。因此,请确保有不同的实例作为键。基本上,IdName
字典应该在while循环中声明和实例化:
while (sqlDataReader.Read())
{
long id = sqlDataReader.GetInt64(sqlDataReader.GetOrdinal("ID"));
string accountName = sqlDataReader.GetString(sqlDataReader.GetOrdinal("ACCOUNT_NAME"));
long sequenceId = sqlDataReader.GetInt64(sqlDataReader.GetOrdinal("SEQUENCE_ID"));
var idName = new Dictionary<long, string>();
idName.Add(id, accountName);
// Make sure that here you don't have repetitions of idName
// or the next line will bomb with the exact same exception
AccountTypeDic.Add(idName, sequenceId);
}
while(sqlDataReader.Read())
{
long id=sqlDataReader.GetInt64(sqlDataReader.GetOrdinal(“id”);
string accountName=sqlDataReader.GetString(sqlDataReader.GetOrdinal(“帐户名称”));
long sequenceId=sqlDataReader.GetInt64(sqlDataReader.GetOrdinal(“序列ID”);
var idName=新字典();
添加(id,accountName);
//确保此处没有重复的idName
//否则下一行就会爆炸,只有一个例外
AccountTypeDic.Add(idName,sequenceId);
}
请不要建议我使用其他数据结构
当我们看到这件事的时候,每个人都会建议你这么做。我见过有人使用字典作为值,但字典作为另一个字典的键,哦。>不要建议我使用其他数据结构-注意,根据MSDN,
dictionary.GetHashCode
是从System.Object
继承的。因此,对于键来说,这是一个非常非常糟糕的选择。我不建议使用其他数据结构,但我想说的是,如果您的目标是将ID和帐户名一起作为字典的键,那么有更好的方法将它们关联在一起,而不是作为另一个字典中的键和值。但是你当然可以自由地做任何适合你情况的事情。你不应该用Int64作为键而不是字典吗?>不要建议我使用其他数据结构-注意,根据MSDN,Dictionary.GetHashCode
是从System.Object
继承的。因此,对于键来说,这是一个非常非常糟糕的选择。我不建议使用其他数据结构,但我想说的是,如果您的目标是将ID和帐户名一起作为字典的键,那么有更好的方法将它们关联在一起,而不是作为另一个字典中的键和值。但是你当然可以自由地做任何适合你的事情。你不应该用Int64作为键而不是字典吗?调用Clear()
methode和实例化新实例是不一样的?不,当然不是。调用.Clear方法只需删除IdName
字典实例的所有值。但它绝对不会改变调用此方法的实例。为了更改实例,您需要调用构造函数。这就是在.NET中创建给定类型的新实例的原因。调用Clear()
methode和实例化新实例是不同的?不,当然不是。调用.Clear方法只需删除IdName
字典实例的所有值。但它绝对不会改变调用此方法的实例。为了更改实例,您需要调用构造函数。这就是在.NET中创建给定类型的新实例的原因。