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

Dor*_*eka 12 c# parameters return-value

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

public static List ListMethod(List result)
Run Code Online (Sandbox Code Playgroud)

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

public static void ListMethod(ref List result)
Run Code Online (Sandbox Code Playgroud)

如果我没有错,"my"方法也会使用listas参数,你应该可以像在他的方法中使用"other"一样使用它.

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

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

Jon*_*eet 33

可能是你并不需要使用ref-但有有差别.

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

result = new List();
...
Run Code Online (Sandbox Code Playgroud)

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

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


Jan*_*Jan 12

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

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

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

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

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

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

ListMethod1(list).ListMethod2(list)...
Run Code Online (Sandbox Code Playgroud)

  • +1表示方法链接的能力.如果你真的想要,你甚至可以做*和*修改参数; `返回结果;`在LOC,CPU或复杂性方面不是非常昂贵,并且可以使功能消费者的生活更轻松. (3认同)