首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用- ref传递给另一个方法的引用类型不带更新的值返回

引用- ref传递给另一个方法的引用类型不带更新的值返回
EN

Stack Overflow用户
提问于 2011-10-28 00:27:14
回答 2查看 389关注 0票数 1

我面临以下问题:

我需要从我的控制器调用到我的域层;它调用一个web服务方法,该方法接受引用请求(ref)。

控制器代码:

代码语言:javascript
复制
//BusinessEntityObject is a Reference-Type (BusinessEntity) object
var request = View.BusinessEntityObject; 
_workflowService.PerformAction(request);
if(request.Errors.Count != 0)
{
    View.Errors = request.Errors;
    return false;
}

域层(WorkflowService.cs类):

代码语言:javascript
复制
public void PerformAction(BusinessEntity request)
{
    //TryAction(System.Action action) basically wraps action in try catch and handles exceptions 
    TryAction(() =>
             {
                 _wcfClient.RequestSomething(ref request);
             });
}

如果_wcfClient.RequestSomething在返回时修改了错误集合,则请求对象具有此错误更新错误集合。但是,一旦控件返回给控制器&检查了错误集合,那么我的更新就消失了。

Edit00:噢,还有无耻的塞子,我在rep 14,我试着增加一堆对我有用的问题/答案,它说我不能因为我的水平很低。

编辑01:非常感谢迪伦,看到有这样一个网站总是好的,指出一个人可能会错过的非常小的事情。将值返回给我的更新代码如下:

域层(WorkflowService.cs类):

代码语言:javascript
复制
public BusinessEntity PerformAction(BusinessEntity request)
{
    //TryAction(System.Action action) basically wraps action in try catch and handles exceptions 
    TryAction(() =>
             {
                 _wcfClient.RequestSomething(ref request);
                 return request;
             });
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-28 00:36:30

当您将一个对象传递到WCF服务时,它将被序列化,通过连线发送,然后在服务器上反序列化。在这种情况下,传递"by ref“不会改变任何事情,如果服务器对其进行更改,则不会将其发送回调用方。只有WCF调用的返回值被序列化并发回。

我建议,如果您需要WCF服务返回任何数据,则将其打包到返回值中。

票数 3
EN

Stack Overflow用户

发布于 2011-10-28 01:24:10

在您的ref方法中缺少一个PerformAction修饰符。

代码语言:javascript
复制
public void PerformAction(ref BusinessEntity request)
{
    TryAction(() => _wcfClient.RequestSomething(ref request));
}

但是,进行此更改将阻止您的代码编译。您将得到以下错误:

不能在匿名方法、lambda表达式或查询表达式中使用ref或out参数“请求”。

你必须这样做才能让它发挥作用:

代码语言:javascript
复制
public void PerformAction(ref BusinessEntity request)
{
    var r = request;
    TryAction(() => _wcfClient.RequestSomething(ref r));
    request = r;
}

所有的一切,似乎有点松散,通过参考传递请求。最好返回一个新的(或相同的)实例,并在外部进行赋值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7923960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档