Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-如何更改函数<;T>;论据_C#_Wcf - Fatal编程技术网

c#-如何更改函数<;T>;论据

c#-如何更改函数<;T>;论据,c#,wcf,C#,Wcf,我有以下功能: protected static T WrapException<T>(Func<T> function) { T result = default(T); WrapException(delegate { result = function(); }); return result; } 它工作得很好,但是当我尝试访问参数时,它会抛出一个异常 我做错了什么 Obs:对不起,是我的英语,不是我

我有以下功能:

protected static T WrapException<T>(Func<T> function)
{
    T result = default(T);

    WrapException(delegate
    {
        result = function();
    });
    return result;
}

它工作得很好,但是当我尝试访问参数时,它会抛出一个异常

我做错了什么


Obs:对不起,是我的英语,不是我的母语。你问题的答案是,用安全的方式做这件事是不可能的

您可以尝试在
Target
对象中编辑
sessionto
。这是一个自动生成的lambda闭包字段。这种结构没有记录在案。它随时可能改变

即使您让它工作,这也是一个糟糕的体系结构,因为您正在进入另一段代码的内部


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

如果在截图之前将windows语言更改为英语,则错误消息应该是英语。这将极大地帮助站点上的其他人帮助您。您希望在哪一点访问/更改
sessionto
?但您已经表明,您无法看到值,更不用说更改了-您只是在“监视”窗口中看到元数据。正如链接问题中所说:“如果要获取参数,必须传递表达式。通过传递“Func”,将传递已编译的lambda,因此无法再访问表达式树”。注意-表达式树是不可变的,这意味着它们不能直接修改。若要更改表达式树,必须创建现有表达式树的副本,并在创建副本时进行所需的更改。“
Func
有一个类型为T的参数并返回一个类型为object的实体-
Func
没有参数并返回一个类型为T的实体。问题是我无法在目标中更改sessionDto,当我尝试这样做时,它在我问题的最后一个屏幕截图中抛出了exeption。”对象“不包含”SessionTo“您不能使用dynamic访问私有成员。使用反思。我做到了,在问题屏幕上看一看,你这是什么意思?我理解你“做了这件事”,但这是错误的,你不应该那样做。使用反射。
public List<ResultDTO> GetSomething(SessionDto sessionDto)
{
    return WrapException(() => _someFacade.Get(sessionDto));
}
((dynamic)function.Target)