linq - Ouput Expression Strings with Fully Qualified Enum Values in C# -


it seems linq expression trees don't express enum values qualified when .tostring() called. here current code:

binaryexpression exp = stringsequal; /* e.g. '(s1, s2) => s1 == s2' */  methodinfo method =     typeof(string).getmethod("equals", new[] { typeof(string), typeof(stringcomparison) });  constantexpression comparison =     expression.constant(stringcomparison.ordinalignorecase, typeof (stringcomparison));  methodcallexpression caseinsensitiveequals = expression.call(exp.left, method, exp.right, comparison);  console.writeline(caseinsensitiveequals); // call .tostring() 
  • result: (s1, s2) => s1.equals(s2, ordinalignorecase)
  • expected: (s1, s2) => s1.equals(s2, stringcomparison.ordinalignorecase)

this expression may execute, string not valid expression if run through expression parser.

what's trick getting expression output fully-qualified enum values?

looking in ilspy, expression.tostring() contains single line:

return expressionstringbuilder.expressiontostring(this); 

expressionstringbuilder internal, sealed class. if want hack bad enough, grab ilspy or other source , hack like.


Comments