C# 返回方法接受的同一个对象有什么问题吗?

C# 返回方法接受的同一个对象有什么问题吗?,c#,oop,C#,Oop,我有一个名为SubmitRequest的方法,它接受一个请求对象。它填充一些附加值,如DB生成的序列id和提交日期。然后返回相同的对象。将其作为一种无效方法是否更好 Request request = JsonConvert.DeserializeObject<Request >(jsonFormData); RequestManager frMan = new RequestManager(); //frMan.SubmitRequest updates the request

我有一个名为SubmitRequest的方法,它接受一个请求对象。它填充一些附加值,如DB生成的序列id和提交日期。然后返回相同的对象。将其作为一种无效方法是否更好

Request request = JsonConvert.DeserializeObject<Request >(jsonFormData);

RequestManager frMan = new RequestManager();
//frMan.SubmitRequest updates the request object by updating some of its properties.
request = frMan.SubmitRequest(request);

return request;

但是这两种方法有什么优点或缺点吗?

如果您不需要对修改后的对象执行任何操作,那么我不会在方法调用中返回它


在命令/查询范例中考虑这一点,
SubmitRequest
看起来更像是一个命令,而不是一个查询,在这种情况下,不返回值是有意义的。

如果您不需要对修改过的对象做任何事情,那么我不会在方法调用中返回它


在命令/查询范例中考虑这一点,
SubmitRequest
看起来更像是一个命令,而不是一个查询,在这种情况下,不返回值是有意义的。

这样写没有坏处。事实上,它是a的基础。

这样写没有坏处。事实上,它是a的基础。

最好将其作为无效方法

返回对象的想法是,当某些内容发生更改时,如果没有任何更改,则返回对象。那么数据就不会被操纵,所以没有必要使用返回

例:


虽然从理论上讲,它不会造成任何伤害。

最好将其作为无效方法

返回对象的想法是,当某些内容发生更改时,如果没有任何更改,则返回对象。那么数据就不会被操纵,所以没有必要使用返回

例:


虽然从理论上讲,它不会造成任何伤害。

返回到
请求中的赋值建议
SubmitRequest
可以返回不同的内容,例如,它返回一个与提交的请求相关的新请求

通常,您看到此“返回对象”模式的情况是
返回此
,以允许方法链接

var result = request.SubmitTo(frMan).WaitForResult().GetResult();

返回到
request
的赋值表明
SubmitRequest
可以返回不同的内容,例如,它返回一个与提交的请求相关的新请求

通常,您看到此“返回对象”模式的情况是
返回此
,以允许方法链接

var result = request.SubmitTo(frMan).WaitForResult().GetResult();

方法的调用方不能保证返回的实例与它们提供的实例相同。当您返回
void
时,您明确表示调用方可以确保在调用完成后处理相同的实例。

方法的调用方不能保证您返回的实例与它们提供的实例相同。当您返回
void
时,您明确表示调用方可以确保在调用完成后处理相同的实例。

IMO,您需要考虑这里发生了什么

只要看一下代码,我就认为发生了这样的事情:

1) frMan提交传入的请求 2) frMan返回一个新请求

这不是你在问题文本中描述的步骤


由于您正在操作请求对象,然后(可能稍后会对其进行处理),我将通过引用将请求对象传递给方法并返回void。这样我就知道我只处理一个请求对象,而且是同一个。此外,我将为“SubmitRequest”提供一个更具逻辑性的定义名称,用于描述您对请求对象所做的操作

IMO,你需要想想这里发生了什么

只要看一下代码,我就认为发生了这样的事情:

1) frMan提交传入的请求 2) frMan返回一个新请求

这不是你在问题文本中描述的步骤


由于您正在操作请求对象,然后(可能稍后会对其进行处理),我将通过引用将请求对象传递给方法并返回void。这样我就知道我只处理一个请求对象,而且是同一个。此外,我将为“SubmitRequest”提供一个更具逻辑性的定义名称,用于描述您对请求对象所做的操作

我想说,这里重要的一点是不要让你的代码变得混乱

我要么返回相同的对象

public Request SubmitRequest(Request request)
或者使用ref参数来表示您的意图

public void SubmitRequest(ref Request request)
或者我想你可以把你的方法完整地记录下来,这样就很清楚了,并且可以

/// <summary>
/// This function will modify your request data!
/// </summary>
/// <param name="request">The request data to be submitted</param>
public void SubmitRequest(Request request)
//
///此功能将修改您的请求数据!
/// 
///要提交的请求数据
公共无效提交请求(请求)

我想说,这里重要的一点是不要让你的代码混淆

我要么返回相同的对象

public Request SubmitRequest(Request request)
或者使用ref参数来表示您的意图

public void SubmitRequest(ref Request request)
或者我想你可以把你的方法完整地记录下来,这样就很清楚了,并且可以

/// <summary>
/// This function will modify your request data!
/// </summary>
/// <param name="request">The request data to be submitted</param>
public void SubmitRequest(Request request)
//
///此功能将修改您的请求数据!
/// 
///要提交的请求数据
公共无效提交请求(请求)

我认为这是构建器模式的一部分(例如,请参见
StringBuilder.Append
)。然而:

  • 我不太清楚在这种情况下这是个好主意
  • 您应该明确地记录这正是该方法的行为方式,并且它永远不会返回不同的引用

我认为这是构建器模式的一部分(例如,请参见
StringBuilder.Append
)。然而:

  • 我不太清楚在这种情况下这是个好主意
  • 您应该明确地记录这正是该方法的行为方式,并且它永远不会返回不同的引用

    • 以以下方式返回对象:

      private SomeObject DoSomeStuff(SomeObject item)
      {
        // perform work on item and change values
      
        return item;
      }
      
      仪表
      request.Submit();