Прежде чем кто-то прокричит ответ, прочитайте вопрос до конца.
Какова цель метода в ExpressionVisitor .NET 4.0:
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);
}
Так, где бы кто-нибудь на самом деле пошел об использовании этого метода? Что мне здесь не хватает?
Спасибо.