任何让字典存储值而不是指向值的方法
本文关键字:方法 字典 存储 任何 | 更新日期: 2023-09-27 18:00:28
所以我有一个字典:
var tableVars = new Dictionary<string, TableDLL.tableObject>();
和tableObject类:
public class tableObject
{
public string Name { get; set; }
public string Type { get; set; }
public string Value { get; set; }
public string Default { get; set; }
}
我经历了这个循环:
var obj = new TableDLL.tableObject();
foreach (XmlNode nodes in root.ChildNodes)
{
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
循环完成后,我有65个不同的Dictionary
条目,但它们都指向循环中生成的最后一个obj
。让Dictionary
存储值的最佳方式是什么,而不是简单地指向它(从而随着obj
的更改而更改)?我是否必须为每个Dictionary
条目制作一个新的TableDLL.tableObject
?
您只创建了一个对象,并使用最后一个节点不断更新Value
。通过更正,您将创建具有适当Value
的N个对象。
此:
var obj = new TableDLL.tableObject();
foreach (XmlNode nodes in root.ChildNodes)
{
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
应该是这样的:
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
将obj
的创建移动到循环中:
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
否则,您将多次添加同一对象。
您只需要在循环中创建它:
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
否则,您总是添加相同的对象。
您只创建了一个对象,因此列表不可能有65个不同的对象。
基本上,你所做的是:
- 拿一个盒子
- 把东西放进盒子里
- 现在把那个东西换成另一个
您尚未创建新容器,只是更改了现有容器的内容。
这样做:
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
区别在于:
- 拿一个盒子
- 把东西放进盒子里
- 现在拿一个新盒子
- 把另一件东西放在新盒子里
- 等等
如果想要65个tableObject
对象,则需要调用new tableObject();
65次。否则,您只是在重复使用原始对象。
如果您需要,可以随时询问更多信息。
每次循环时创建tableObject
的新副本。
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}