所以我有一本字典:
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
)?我是否必须为每个TableDLL.tableObject
条目制作一个新的Dictionary
?
答案 0 :(得分:3)
将obj
的创建移动到循环中:
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
否则,您将多次添加相同的对象。
答案 1 :(得分:3)
您只创建一个对象并使用最后一个节点不断更新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);
}
答案 2 :(得分:2)
你只需要在循环中创建它:
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}
否则你总是添加相同的对象。
答案 3 :(得分:2)
您只创建了1个对象,因此列表不可能有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次。否则你只是重复使用原始对象。
如果您需要,请随时提出更多信息。
答案 4 :(得分:1)
每次循环创建tableObject
的新副本。
foreach (XmlNode nodes in root.ChildNodes)
{
var obj = new TableDLL.tableObject();
obj.Value = nodes.InnerText;
tableVars.Add(nodes.Name, obj);
}