(из комментариев)
Использование универсального типа 'System.Collections.Generic.IEnumerator' требует аргументов типа '1'
Это означает, что у вас есть
using System.Collections.Generic;
, а не
using System.Collections;
переключиться на последнее, и оно будет работать.IEnumerable
/ IEnumerator
- это неуниверсальный API.
Или лучше: используйте foreach
- это проще, безопаснее и правильнее (вы не забыли проверить IDisposable
, дляпример).
Дополнительные примечания:
- объединение строк в цикле очень плохо - это вызывает распределение телескопических строк (то есть многоиз промежуточных струн);что-то вроде
StringBuilder
предпочтительнее с большим запасом - сборка xml вручную не идеальна - вам нужно кодировать и т. д .;
XmlWriter
было бы идеально
, поэтому IMO: используйте XmlWriter
, который записывает в StringBuilder
, используя foreach
Не проверено, но что-то вроде:
private string parseNode(TreeNode tn)
{
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
writer.WriteStartElement("xml");
parseNode(tn, writer);
writer.WriteEndElement();
}
return sb.ToString();
}
private void parseNode(TreeNode tn, XmlWriter writer)
{
if (tn.Nodes.Count > 0)
{
writer.WriteStartElement(tn.Text);
foreach (TreeNode child in tn.Nodes)
{
parseNode(child, writer);
}
writer.WriteEndElement();
}
else
{
writer.WriteString(tn.Text);
}
}