मैं अभिव्यक्ति पेड़ पार्स करने के साथ प्रयोग कर रहा हूँ और निम्नलिखित कोड लिखा है:सी #: स्ट्रिंग पैरामीटर रहस्यमय रूप से खाली पर रीसेट किया जा रहा है - कृपया मदद करें!
private void TestExpressionTree()
{
Expression<Func<int, bool>> expression = x => x == 1 || x == 2;
string output = String.Empty;
HandleExpression(expression.Body, output);
Output("Output", output);
}
private void HandleExpression(Expression expression, string output)
{
switch (expression.NodeType)
{
case ExpressionType.Conditional:
HandleConditionalExpression(expression, output);
break;
case ExpressionType.OrElse:
HandleOrElseExpression(expression, output);
break;
case ExpressionType.Equal:
HandleEqualExpression(expression, output);
break;
case ExpressionType.Parameter:
HandleParameterExpression(expression, output);
break;
case ExpressionType.Constant:
HandleConstantExpression(expression, output);
break;
}
}
private void HandleConditionalExpression(Expression expression, string output)
{
ConditionalExpression conditionalExpression = (ConditionalExpression) expression;
HandleExpression(conditionalExpression.Test, output);
}
private void HandleOrElseExpression(Expression expression, string output)
{
BinaryExpression binaryExpression = (BinaryExpression)expression;
HandleExpression(binaryExpression.Left, output);
output += "||";
HandleExpression(binaryExpression.Right, output);
}
private void HandleEqualExpression(Expression expression, string output)
{
BinaryExpression binaryExpression = (BinaryExpression)expression;
HandleExpression(binaryExpression.Left, output);
output += "=";
HandleExpression(binaryExpression.Right, output);
}
private void HandleParameterExpression(Expression expression, string output)
{
ParameterExpression parameterExpression = (ParameterExpression)expression;
output += parameterExpression.Name;
}
private void HandleConstantExpression(Expression expression, string output)
{
ConstantExpression constantExpression = (ConstantExpression)expression;
output += constantExpression.Value.ToString();
}
कोड के विचार अभिव्यक्ति पेड़ पार्स और स्ट्रिंग चर उत्पादन में नोड्स के बारे में विवरण लिखने के लिए है। हालांकि, जब यह चर पृष्ठ पर लिखा जाता है (Output()
विधि का उपयोग करके), मुझे यह खाली लगता है।
जब मैं डिबगर का उपयोग कोड से निकलने के लिए, मुझे लगता है कि उत्पादन सही ढंग से 'एक्स' के लिए निर्धारित है जब कोड पहली बार के लिए HandleParameterExpression()
कार्यान्वित करता है, लेकिन जैसे ही नियंत्रण रिटर्न HandleParameterExpression()
से पीठ में स्विच ब्लॉक करने के लिए HandleExpression()
, चर रहस्यमय रूप से खाली है।
चूंकि तार संदर्भ प्रकार हैं, इसलिए मुझे विधियों के बीच संदर्भ को पारित करने में सक्षम होना चाहिए और विधियों द्वारा किए गए मूल्य में परिवर्तनों को बनाए रखा जाना चाहिए, है ना? क्या सी # में गुजरने वाले पैरामीटर की कुछ सूक्ष्मता है जिसे मुझे पता नहीं है?
आसान बाघों! पांच मिनट में चार जवाब! सभी को भारी धन्यवाद! – David
आप संशोधित आउटपुट क्यों नहीं लौट रहे हैं? क्या मैं कुछ भूल रहा हूँ? –
@ ओमार: क्योंकि मुझे इसकी आवश्यकता नहीं है। मापदंडों को संशोधित करने के साथ-साथ बस कुछ लौटने के तरीकों का उपयोग करना संभव है। – David