使用方法调用很容易从lambda转换为Expression...
public void GimmeExpression(Expression<Func<T>> expression)
{
((MemberExpression)expression.Body).Member.Name; // "DoStuff"
}
public void SomewhereElse()
{
GimmeExpression(() => thing.DoStuff());
}
但我希望将这个 Func 转化为表达式,只有在极少数情况下需要这样做...
public void ContainTheDanger(Func<T> dangerousCall)
{
try
{
dangerousCall();
}
catch (Exception e)
{
// This next line does not work...
Expression<Func<T>> DangerousExpression = dangerousCall;
var nameOfDanger =
((MemberExpression)dangerousCall.Body).Member.Name;
throw new DangerContainer(
"Danger manifested while " + nameOfDanger, e);
}
}
public void SomewhereElse()
{
ContainTheDanger(() => thing.CrossTheStreams());
}
不能隐式地将类型'System.Func<T>'转换为'System.Linq.Expressions.Expression<System.Func<T>>',这行代码无法编译通过。显式转换也无法解决这个问题。我是否忽略了某个可以解决这个问题的方法?