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