c# - 如何更改Func <t>参数

时间:2015-12-17 21:36:06

标签: c# wcf

我有以下功能:

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)

enter image description here

它工作正常,但是当我尝试访问参数时,它会引发异常。

enter image description here

我做错了什么?

Obs:对不起我的英语,而不是我的母语

1 个答案:

答案 0 :(得分:2)

你的问题的答案是,以安全的方式做到这一点是不可能的。

您可以尝试修改sessionDto对象中的Target。这是一个自动生成的lambda闭包字段。此结构未记录。它可以随时改变。

即使你使它工作,这也是糟糕的架构,因为你正在接触另一段代码的内部。

可能你应该重构你的代码,这样就不必编辑另一个函数的局部变量(!)。