2013-02-21 47 views
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)?我是否必須爲每個Dictionary條目製作新的TableDLL.tableObject

回答

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); 
    } 
3

移動的obj創作進入循環:

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

否則,你要添加的相同對象多次。

2

你只需要在循環來創建它:

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

否則你總是添加相同的對象。

1

創建tableObject的新副本一輪每次循環。

foreach (XmlNode nodes in root.ChildNodes) 
    { 
     var obj = new TableDLL.tableObject(); 
     obj.Value = nodes.InnerText; 
     tableVars.Add(nodes.Name, obj); 
    } 
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個tableObject對象,你需要調用new tableObject(); 65倍。否則,你只是在重複使用原始對象。

隨意問的詳細信息,如果您需要它。