在有人喊出答案之前,请仔细阅读问题。.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);
}
那么,有人应该在哪里使用这种方法呢?我错过了什么吗?
谢谢。
subtractExpression
转换回Expression<Func<int, int, int>>
的机会大吗?我好像找不到一个完整的例子... - undefined