我有以下功能:
protected static T WrapException<T>(Func<T> function)
{
T result = default(T);
WrapException(delegate
{
result = function();
});
return result;
}
我在所有WCF项目服务端点中使用此功能:
public List<ResultDTO> GetSomething(SessionDto sessionDto)
{
return WrapException(() => _someFacade.Get(sessionDto));
}
我需要的是在调用操作之前在WrapException中更改sessionDto的值。
我尝试通过以下演员来访问它:
((dynamic)function.Target)
它工作正常,但是当我尝试访问参数时,它会引发异常。
我做错了什么?
Obs:对不起我的英语,而不是我的母语
答案 0 :(得分:2)
你的问题的答案是,以安全的方式做到这一点是不可能的。
您可以尝试修改sessionDto
对象中的Target
。这是一个自动生成的lambda闭包字段。此结构未记录。它可以随时改变。
即使你使它工作,这也是糟糕的架构,因为你正在接触另一段代码的内部。
可能你应该重构你的代码,这样就不必编辑另一个函数的局部变量(!)。