【发布时间】:2013-03-18 14:02:34
【问题描述】:
我有一个将 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;
}
【问题讨论】:
-
当然,如果
p是const变量,这将自动发生(该变量不会被“捕获”和“提升”到生成的类上的字段,如<>c__DisplayClass0然后),但我想你从某个地方得到p,所以它不能被声明为const(所以我的评论可能没有用)。