我初始化了对象,然后在每个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都是正确的。
答案 0 :(得分:3)
您正在覆盖已初始化的单个MessageID
对象上的msgObj
属性,然后您将该单个msgObj
添加到msgNameList
两次(只要两个if语句谓词都为真)。如果您希望将不同的msgObj
属性添加到列表中,则需要创建新的MessageID
。
以这种方式思考 - 如果你面前只有一张纸(即msgObj
)并且你在纸张顶部写着“你好”,如果你是再次写在同一张纸的顶部,在你写别的东西之前你需要删除“你好”。在你的情况下,你宁可写“你好”,然后将你的原始纸张复印到复印机上,然后将其复制到某处(即把它放在列表中)。