【发布时间】:2015-12-17 21:36:05
【问题描述】:
我有以下功能:
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:对不起,我的英语不是我的母语
【问题讨论】:
-
如果您在截屏之前将 Windows 语言更改为英语,您的错误消息应该是英语。这将极大地帮助网站上的其他人为您提供帮助。
-
你想在什么时候访问/更改
sessionDto? -
但是您已经证明您看不到该值,更不用说更改它了 - 您只是在监视窗口中看到元数据。正如它在链接问题中所说 - “如果你想获取参数,你将不得不传递表达式。通过传递“Func”,你将传递编译的 lambda,所以你不能再访问表达式树了”。
-
请注意How to: Modify Expression Trees - “表达式树是不可变的,这意味着它们不能直接修改。要更改表达式树,您必须创建现有表达式树的副本,并且在创建时副本,进行必要的更改。”
-
Func<T, object>有一个类型为 T 的参数并返回一个类型为 object 的实体 -Func<T>没有参数并返回一个类型为 T 的实体。