繁体   English   中英

最佳实践:ref参数或返回值?

[英]Best practice: ref parameter or return value?

其实我正在做一个列表作为参考参数,如下所示:

public static List ListMethod(List result)

我看到有些人也这样做了:

public static void ListMethod(ref List result)

如果我没有错,“my”方法也会将list作为参考参数,你应该能够像其他方法一样使用它。

但是对我来说,输入参数,对它执行某些操作并在方法返回值中返回它似乎更“干净”。

对一种方法或另一种方法有任何好的论据吗?

可能是因为你不需要使用ref -但是有区别的。

通常当我看到人们使用ref作为参考类型参数时,这是因为他们不了解参数传递的工作原理。 但是如果你的方法有这样的东西:

result = new List();
...

然后在第一种情况下,调用者将看不到更改,而在第二种情况下,调用者的变量将被更改为引用新对象。

有关详细信息,请参阅我关于参数传递的文章

不,您的方法不使用ref参数。 默认值是pass by value

不同的是,您的方法只能修改列表的内容,而不能修改参数result指向的引用。

什么是最好的方法? 这取决于你的方法应该做什么。

当您的方法修改列表或返回新数据时,您应该使用返回值。 理解你的代码比使用ref参数更好。

返回值的另一个好处是使用方法链的能力。

您可以编写这样的代码,将list参数从一个方法传递到另一个方法:

ListMethod1(list).ListMethod2(list)...

如果你刚刚返回一个List,你应该总是使用第一个,因为它显示了这个意图。

带有ref的版本告诉我,我可以从列表开始,你的方法将修改我发送的列表,甚至用另一个列表更改它。 如果这是你的意图,那就去做吧。

但是如果方法总是返回一个新列表,则使用返回值而不是ref参数。

旁边的注释 :您可以使用out而不是ref来显示您返回新列表的意图,但如果您使用其他值的返回值,这只是一个很好的做法。

关于ref参数的一个特别之处在于 - “用ref传递的变量必须先赋值。”。 因此,如果您希望在调用之前对调用方法进行严格的赋值,则可以使用ref参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM