Невозможно объединить dict<string, object> в masterDict без нулевой ссылки

Это выглядит достаточно просто, но я не могу добавить значения в свой основной словарь. Я думаю, это потому, что в dict есть элементы объекта, а не просто простой тип, и у меня нет правильного синтаксиса в методе "masterDict.Add". Я знаю, что некоторые из моих значений объекта установлены, некоторые являются пустой строкой, а некоторые - нулевыми, но я не думаю, что это является источником проблемы - объект существует. Вылетает на "newMsg.Value".

Моя ошибка:

System.NullReferenceException was unhandled
HResult=-2147467261
Message=Object reference not set to an instance of an object.

    Example Code:

    public class msg
    {
        public string msgId { get; set; }
        public string msgType { get; set; }
        public string lastName { get; set; }
        public string firstName { get; set; }
        public string dateOfBirth { get; set; }
        public string sex { get; set; }
        public string pAddress { get; set; }
        public string pPhone { get; set; }
        public IEnumerable<string> prodCode { get; set; }
        public string dateOfServiceText { get; set; }
     } 
    public static Dictionary<String, msg> masterDict { get; set; }

    public static Dictionary<String, msg> tmpDict = new Dictionary<String, msg>()
    {
        { "1111", new msg { msgId = "1111", msgType = "DFT", firstName="Sachin" }},
        { "1112", new msg { msgId = "1112", msgType = "DFT", firstName="Dina" }},
        { "1113", new msg { msgId = "1113", msgType = "DFT", firstName="Andy" }}
    };

    public static void mergeDict()
    {

        //now insert your new values into the master
        foreach (var newMsg in tmpDict)
            if (newMsg.Value != null)
                masterDict.Add(newMsg.Key, newMsg.Value);
    }

    static void Main(string[] args)
    {
        mergeDict();
    }

1 ответ

Решение

Вы никогда не инициализировали свой masterDict:

public static Dictionary<String, msg> masterDict { get; set; }

Это ничего не значит. Он будет равен нулю, пока вы не установите его:

masterDict = new Dictionary<String, msg>();

Вы, вероятно, хотите сделать это в своем конструкторе классов.

Другие вопросы по тегам