我有两个循环从两个XML源提取数据:
循环1:
foreach (XmlNode nodes in node.ChildNodes)
{
if (nodes.Name == "DEFAULT")
defaults[count] = nodes.InnerText;
if (nodes.Name == "TYPE"
types[count] = nodes.InnerText;
if (nodes.Name == "COL_NAM"
names[count] = nodes.InnerText;
}
count++;
Run Code Online (Sandbox Code Playgroud)
循环2:
foreach (XmlNode nodes in root.ChildNodes)
{
vals[i] = nodes.InnerText;
cols[i] = nodes.Name;
i++;
}
Run Code Online (Sandbox Code Playgroud)
不知何故,我想将这些数据组织成一个终极对象.该对象需要有4个部分:名称,类型,值和默认值.本质上,我想将Loop1中的所有内容组合在一起,然后将Loop2中的所有内容组合在一起,然后将这两个对象组合成一个对象,该对象与Loop1中的名称和来自Loop2的cols匹配.理想情况下,Loop2中的节点数量可能小于Loop1的节点数量.但是,如果那是不可能的,我可以解决它.
为了更好地了解最终对象:
object everything = {{names}, {types}, {values}, {defaults}};
Run Code Online (Sandbox Code Playgroud)
名称将来自BOTH循环,并将成为对象的"键".类型和默认值将来自Loop1,值将来自Loop2.串联将使用Name/Col匹配.
PS:我试图使用2D String数组来做这件事,但在尝试将两个匹配的cols和names字段组合时遇到了麻烦.
您可以使用Dictionary类并将其Name用作对象的键.
例如:
public class MyObj{
public string Name{get;set;};
public string Type{get;set;};
public string Value{get;set;};
public string Default{get;set;};
}
Run Code Online (Sandbox Code Playgroud)
并修改你的循环使用它:
var allObjs = new Dictionary<string, MyObj>();
foreach (XmlNode nodes in node.ChildNodes)
{
var obj = new MyObj();
if (nodes.Name == "DEFAULT")
obj.Default = nodes.InnerText;
...
allObjs.Add(obj.Name, obj);
}
Run Code Online (Sandbox Code Playgroud)
然后在第二个循环中使用键检索现有对象以更新值.像这样的东西:
foreach (XmlNode nodes in root.ChildNodes)
{
var myObj = allObs[nodes.Name];
myObj.Value = nodes.InnerText;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |