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エントリがありますが、それらはすべて、ループで作成されたLASTを指して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し、最後のノードで継続的に更新しているだけです。修正により、適切なを使用してN個のオブジェクトを作成することになります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. 等...

65個のオブジェクトが必要な場合は、 65回tableObject呼び出す必要があります。new tableObject();それ以外の場合は、元のオブジェクトを再利用しているだけです。

必要に応じて、詳細についてお気軽にお問い合わせください。

于 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 に答える