0

这是非常基本的,但我想知道是否有更好的方法来编写以下概念。

 for (int j = 0; j < node.ChildNodes[i].Attributes.Count; j++)
                {
                    if (j != 0) row.Cells[1].Value += ", ";
                    row.Cells[1].Value += node.ChildNodes[i].Attributes[j].Name;
                 }

基本上我将 c# 中的节点输出到一个表中,我希望每个属性名称用逗号分隔。问题是,显然对于循环的第一个实例,我不希望逗号前面有逗号,即我不能只是

row.Cells[1].Value +=  ", " + node.ChildNodes[i].Attributes[j].Name;

否则单元格中的输出将类似于:

, name, day

代替

name, day

因此,尽管这可行,但每次循环检查这确实是循环的第一次迭代似乎是在浪费计算机时间,尤其是当这个循环嵌套在递归方法中时。有没有更好的方法来做到这一点?

(请记住,for 循环条件中的 node.ChildNodes[i].Attributes.Count 可能为 0,即节点(它是一个 xmlNode)可能没有子节点,因此循环加倍作为对孩子们也一样。)

我希望我解释得很好!

4

3 回答 3

4

尝试string.Join

var commaSeperated = string.Join(", ", node.ChildNodes[i].Attributes.Select(a => a.Name));
于 2013-08-22T12:01:23.980 回答
2

使用string.Join方法。这是在一行中完成整个事情的一种华丽的方式:

row.Cells[1].Value = string.Join(", ", node.ChildNodes
    .SelectMany(node => node.Attributes.Select(attribute => attribute.Name)))
于 2013-08-22T12:04:18.440 回答
0

如果你想用循环来做,从第二次迭代开始:

string result = array[0];
for(int i = 1; i < array.Length; i++)
    result += ", " + array[i];

这是一般的想法

于 2013-08-22T12:03:01.970 回答