Bevor jemand die Antwort schreit, lesen Sie bitte die Frage durch.Was bedeutet ExpressionVisitor.Visit <T>?
Was ist der Zweck des Verfahrens in Expression .NET 4.0 ist:
public static ReadOnlyCollection<T> Visit<T>(ReadOnlyCollection<T> nodes, Func<T, T> elementVisitor)
Meine erste Vermutung über den Zweck dieses Verfahrens war, dass es jeden Knoten in jedem Baum durch die nodes
angegeben besuchen würde Parameter und schreiben Sie den Baum mit dem Ergebnis der elementVisitor
Funktion neu.
Dies scheint nicht der Fall zu sein. Eigentlich scheint diese Methode ein wenig mehr als nichts zu tun, es sei denn, ich vermisse hier etwas, was ich stark vermute ...
Ich habe versucht, diese Methode in meinem Code zu verwenden und wenn die Dinge nicht geklappt haben Wie erwartet, übertrug ich die Methode und fand:
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);
}
Also wo würde jemand tatsächlich mit dieser Methode gehen? Was fehlt mir hier?
Danke.
Ich hätte erwartet, dass es den gesamten Baum in addLambdaExpression besucht, nicht nur LambdaExpression selbst hinzufügen. – Jeff
In diesem Fall sollten Sie einen benutzerdefinierten Typ von ExpressionVisitor erben und die NodeType.Lambda in der Visit() -Methode behandeln. – codekaizen