0

所以我有一本字典:

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条目制作一个新条目吗?

4

5 回答 5

3

将创建移动obj到循环中:

    foreach (XmlNode nodes in root.ChildNodes)
    {
        var obj = new TableDLL.tableObject();
        obj.Value = nodes.InnerText;
        tableVars.Add(nodes.Name, obj);
    }

否则,您将多次添加相同的对象。

于 2013-02-21T15:46:43.030 回答
3

您只创建一个对象并Value使用最后一个节点不断更新。通过更正,您将使用适当的Value.

这个:

    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);
    }
于 2013-02-21T15:46:52.063 回答
2

您只需在循环中创建它:

foreach (XmlNode nodes in root.ChildNodes)
{
    var obj = new TableDLL.tableObject();
    obj.Value = nodes.InnerText;
    tableVars.Add(nodes.Name, obj);
}

否则,您总是添加相同的对象。

于 2013-02-21T15:46:50.737 回答
2

您只创建了 1 个对象,因此列表不可能有 65 个不同的对象。

基本上,你所做的是:

  1. 拿一个盒子。
  2. 把东西放进盒子里。
  3. 现在用另一个东西代替那个东西。

您还没有创建新容器,只是更改了现有容器的内容。

像这样做:

    foreach (XmlNode nodes in root.ChildNodes)
    {
        var obj = new TableDLL.tableObject();
        obj.Value = nodes.InnerText;
        tableVars.Add(nodes.Name, obj);
    }

区别在于:

  1. 拿一个盒子。
  2. 把东西放进盒子里。
  3. 现在拿一个新盒子。
  4. 把其他东西放在新盒子里
  5. ETC...

如果您想要 65 个tableObject对象,则需要调用new tableObject();65 次。否则,您只是在重用原始对象。

如果您需要,请随时询问更多信息。

于 2013-02-21T15:50:36.280 回答
1

tableObject每次循环创建一个新副本。

    foreach (XmlNode nodes in root.ChildNodes)
    {
        var obj = new TableDLL.tableObject();
        obj.Value = nodes.InnerText;
        tableVars.Add(nodes.Name, obj);
    }
于 2013-02-21T15:49:15.833 回答