Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中字典中的字典#_C# - Fatal编程技术网

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中创建给定类型的新实例的原因。