为什么对象的属性在我已经将它们插入列表时会发生变化?

时间:2017-06-15 21:42:38

标签: c# object if-statement

我初始化了对象,然后在每个if语句中将对象添加到列表中。对象列表将具有最后一个if语句的属性,我不知道为什么。我是否应该在每个if语句中创建一个新对象?

            var msgObj = new MessageName();
            msgObj.ServerID = serverList[i].EBCPServerID;

            if(keyValuePairs.ContainsKey("rar"))
            {
                msgObj.MessageID = MsgList["rar"]; msgObj.DiagnosticCnt = 0; msgObj.DiagnosticStr = keyValuePairs["rar"]; 
                msgNameList.Add(msgObj);
            }

            if(keyValuePairs.ContainsKey("uptime_in_seconds"))
            {
               msgObj.MessageID= MsgList["uptime_in_seconds"]; msgObj.DiagnosticCnt= Convert.ToInt32(keyValuePairs["uptime_in_seconds"]); msgObj.DiagnosticStr = "";
               msgNameList.Add(msgObj);
            }
           //etc.
            InsertIntoSQL(msg

NameList中);

当我在最后查看msgNameList时,它所有具有我设置为最后一个属性的对象。但是,当我查看" msgNameList.Add(msgObj);"时,每个msgObj都是正确的。

1 个答案:

答案 0 :(得分:3)

您正在覆盖已初始化的单个MessageID对象上的msgObj属性,然后您将该单个msgObj添加到msgNameList两次(只要两个if语句谓词都为真)。如果您希望将不同的msgObj属性添加到列表中,则需要创建新的MessageID

以这种方式思考 - 如果你面前只有一张纸(即msgObj)并且你在纸张顶部写着“你好”,如果你是再次写在同一张纸的顶部,在你写别的东西之前你需要删除“你好”。在你的情况下,你宁可写“你好”,然后将你的原始纸张复印到复印机上,然后将其复制到某处(即把它放在列表中)。