我有一个将 LambdaExpression 转换为字符串的方法。我使用这些字符串作为缓存的键。
string p = "x";
var a = LambdaToString<MyType>(m => m.P == p);
与此不同:
string p = "y";
var a = LambdaToString<MyType>(m => m.P == p);
但是,无论 p 的值如何,我的 LambdaToString 方法的当前状态都会产生相同的输出。这是:
(MyType.P == value(ConsoleApplication1.Program+<>c__DisplayClass0).p)
我希望我的 LambdaToString 函数做的是将表达式的“value(class).p”部分解析为“x”或“y”的实际文字字符串,视情况而定。
这是我的 LambdaToString 方法的当前状态。我不确定我需要做什么来修改它以产生我想要的输出:
public static string LambdaToString<T>(Expression<Func<T, bool>> expression)
{
string body = expression.Body.ToString();
foreach (var parm in expression.Parameters)
{
var parmName = parm.Name;
var parmTypeName = parm.Type.Name;
body = body.Replace(parmName + ".", parmTypeName + ".");
}
return body;
}