C#中具有完全限定枚举值的输出表达式字符串

时间:2015-07-09 21:48:03

标签: c# linq expression-trees

当调用.ToString()时,似乎LINQ表达式树不会将Enum值表示为完全限定。这是当前的代码:

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); // will call .ToString()
  • 结果(s1, s2) => s1.Equals(s2, OrdinalIgnoreCase)
  • 预计(s1, s2) => s1.Equals(s2, StringComparison.OrdinalIgnoreCase)

此表达式本身可以执行,但如果通过表达式解析器运行,则该字符串不是有效表达式。

让Expression输出完全限定的枚举值有什么诀窍?

1 个答案:

答案 0 :(得分:2)

查看ILSpy,Expression.ToString()包含一行:

return ExpressionStringBuilder.ExpressionToString(this);

ExpressionStringBuilder是一个密封的内部课程。如果你想破解它,那么就从ILSpy或其他来源获取它并按照你的意愿进行攻击。