किसी को उत्तर देने से पहले, कृपया प्रश्न पढ़ें।ExpressionVisitor क्या करता है। <T> क्या करें?
.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);
}
तो कोई वास्तव में इस विधि का उपयोग करने के बारे में कहां जाएगा? मुझे यहां क्या समझ नहीं आ रहा है?
धन्यवाद।
मैं उम्मीद करता हूं कि यह addlambdaExpression में पूरे पेड़ पर जायेगा, न केवल addLambdaExpression। – Jeff
उस स्थिति में आप ExpressionVisitor से एक कस्टम प्रकार का उत्तराधिकारी प्राप्त करना चाहते हैं और विज़िट() विधि में NodeType.Lambda को संभालेंगे। – codekaizen