pass by reference - C#: String parameter being mysteriously reset to empty - please help! -


i'm experimenting parsing expression trees , have written following code:

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();   } 

the idea of code parse expression tree , write details nodes string variable output. however, when variable written page (using output() method), i'm finding it's empty.

when use debugger step through code, find output correctly set 'x' when code executes handleparameterexpression() first time, control returns handleparameterexpression() switch block in handleexpression(), variable mysteriously empty again.

since strings reference types, should able pass reference between methods , changes value made methods should retained, right? there subtlety of parameter passing in c# i'm not aware of?

you need pass in variable want change reference. so, in example, need way:

private void handleorelseexpression(expression expression, ref string output) 

and when call function, way:

handleorelseexpression(expression, ref output) 

Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -