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
Post a Comment