在我的解决方案中,我有一个Object Class
,其Copy()
将XElement
从XML文件复制到另一个。
现在,我递归调用Copy()
,因为我需要发送当前Objects
内的XElement
。在此过程中,我会提取将要更新的特定value
的{{1}}。
现在,我发现这样做的唯一方法就是提取所有这些值并将它们存储在每次{{1}的新实例都不会被更改的attribute
中生成。
所以,基本上我有:
static variable
避免使用Object
的最佳方法是什么?
谢谢
答案 0 :(得分:2)
一种解决方案是使方法不是递归的,而是迭代的。您可以编写通用树遍历方法来遍历XML树,然后在您拥有的元素上调用它,允许您填充列表而无需在方法调用之间共享任何状态。
这是一个遍历树的简单方法:
public static IEnumerable<T> Traverse<T>(
this IEnumerable<T> source
, Func<T, IEnumerable<T>> childrenSelector)
{
var stack = new Stack<T>(source);
while (stack.Any())
{
var next = stack.Pop();
yield return next;
foreach (var child in childrenSelector(next))
stack.Push(child);
}
}
然后,您可以在元素上调用该方法以获取整个子元素树:
XElement element = GetElement();
var tree = new[] { element }.Traverse(e => e.Elements());
答案 1 :(得分:1)
重载Copy方法以接受列表作为参数。
public String Copy(List<Tuple<string, string>> Ids) {}
public String Copy() {}