嘿伙计们,我正在尝试添加到字典中,并接受"对象引用未设置为对象的实例".错误.我认为这意味着我试图将其设置为不存在?
这是相关代码:
Dictionary<string, Dictionary<int, Dictionary<string, string>>> user = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>();
user.Add("approved", null);
user.Add("pending", null);
user.Add("declined", null);
int zz = 0;
while (results.Read())
{
Dictionary<string, string> field = new Dictionary<string, string>();
for (int i = 0; i < results.FieldCount; i++)
{
switch (fds[i].ToString())
{
case "gender":
string gend = ((Convert.ToBoolean(results[i])) == false) ? "Male" : "Female";
field.Add("gender", gend);
break;
default:
field.Add(fds[i], results[i].ToString());
break;
}
}
string status = results[0].ToString();
user["approved"].Add(zz, field);
zz++;
}
Run Code Online (Sandbox Code Playgroud)
我在开始设置三个词典的方式有问题吗?谢谢,
精神科
您的嵌套字典结构中有第三级,并且您正在跳过第二级的初始化.至少,您需要添加:
user["approved"] = new Dictionary<int, Dictionary<string, string>>();
Run Code Online (Sandbox Code Playgroud)
可能更好的是预先进行初始化:
user.Add("approved", new Dictionary<int, Dictionary<string, string>>());
user.Add("pending", new Dictionary<int, Dictionary<string, string>>());
user.Add("declined", new Dictionary<int, Dictionary<string, string>>());
Run Code Online (Sandbox Code Playgroud)
就个人而言,我根本不会使用词典user
.它意味着请求(或其他)的状态可变,但事实上存在有限的可能性:待定,已批准,已拒绝.在我看来,你最好写一个包含3个集合的类.
这也有助于您不会有三个嵌套的词典,使代码更具可读性.这足以让你感到困惑,更不用说有人在你之后维护代码了:)