避免静态变量的解决方案

时间:2014-09-18 18:25:21

标签: c# oop

在我的解决方案中,我有一个Object Class,其Copy()XElement从XML文件复制到另一个。

现在,我递归调用Copy(),因为我需要发送当前Objects内的XElement。在此过程中,我会提取将要更新的特定value的{​​{1}}。

现在,我发现这样做的唯一方法就是提取所有这些值并将它们存储在每次{{1}的新实例都不会被更改的attribute中生成。

所以,基本上我有:

static variable

避免使用Object的最佳方法是什么?

谢谢

2 个答案:

答案 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() {}