无法添加到csharp字典定义,接收"对象引用未设置为实例..."

Psy*_*nic 1 c#

嘿伙计们,我正在尝试添加到字典中,并接受"对象引用未设置为对象的实例".错误.我认为这意味着我试图将其设置为不存在?

这是相关代码:

                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)

我在开始设置三个词典的方式有问题吗?谢谢,

精神科

Tho*_*rin 5

您的嵌套字典结构中有第三级,并且您正在跳过第二级的初始化.至少,您需要添加:

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个集合的类.

这也有助于您不会有三个嵌套的词典,使代码更具可读性.这足以让你感到困惑,更不用说有人在你之后维护代码了:)