【发布时间】:2011-11-21 09:08:48
【问题描述】:
其实我是在做一个列表作为参考参数如下:
public static List ListMethod(List result)
我也看到有人这样做:
public static void ListMethod(ref List result)
如果我没记错的话,“my”方法也将list作为参考参数,您应该可以像“other”在他的方法中那样使用它。
但是在我看来,你输入一个参数,用它做一些事情并在方法返回值中返回它似乎更“干净”。
有什么好的论据支持或反对一种方法吗?
【问题讨论】:
-
这是一个列表?为什么要通过 ref 发送它你想要达到什么目的?
-
如果 out 作为 ref/out 传递,内部会在堆栈中生成一个指向堆副本的引用,并将其传递给被调用方方法。如果使用 ref,则使用相同的引用作为传递参数。
-
为什么您认为您需要在第一种方法中返回
List而在第二种方法中不返回任何内容? -
当然,如果列表本身只是被变异了,那么就不需要返回或引用。但是,如果您为参数分配一个全新的列表,那么被调用者需要返回或引用才能看到更改。但是,如下所述,即使最终结果看起来相同,return 和 ref 之间也存在差异。
-
这个简单的例子应该让你明白pastebin.com/sm8niPRD和jon skeet所说的一样。
标签: c# parameters return-value