在有人喊出答案之前,请通读问题。
.NET 4.0 的 ExpressionVisitor 中方法的目的是什么:
public static ReadOnlyCollection<T> Visit<T>(ReadOnlyCollection<T> nodes, Func<T, T> elementVisitor)
我对这个方法的目的的第一个猜测是它会访问nodes
参数指定的每棵树中的每个节点,并使用函数的结果重写树elementVisitor
。
情况似乎并非如此。实际上,这种方法似乎比什么都不做,除非我在这里遗漏了一些东西,我强烈怀疑我是......
我尝试在我的代码中使用此方法,但当事情没有按预期进行时,我反映了该方法并发现:
public static ReadOnlyCollection<T> Visit<T>(ReadOnlyCollection<T> nodes, Func<T, T> elementVisitor)
{
T[] list = null;
int index = 0;
int count = nodes.Count;
while (index < count)
{
T objA = elementVisitor(nodes[index]);
if (list != null)
{
list[index] = objA;
}
else if (!object.ReferenceEquals(objA, nodes[index]))
{
list = new T[count];
for (int i = 0; i < index; i++)
{
list[i] = nodes[i];
}
list[index] = objA;
}
index++;
}
if (list == null)
{
return nodes;
}
return new TrueReadOnlyCollection<T>(list);
}
那么有人会在哪里使用这种方法呢?我在这里想念什么?
谢谢。