C#传递List参数

时间:2014-04-16 20:49:07

标签: c#

如果我正在编写一个接受两个列表参数的方法,如下所示:

public void ModifyYourListsHere(List<MyClass1> list1, List<MyClass2> list2)
{
    ...add and remove from the lists
}

如果我希望调用者理解列表会被修改,我应该将其作为refout传递吗?或者我只需要记录方法?或者用户是否希望它们可能被修改?

3 个答案:

答案 0 :(得分:3)

您绝对不想使用out,因为这意味着您将在离开方法之前分配变量(编译器实际上会强制执行此操作)。

ref将允许您重新分配传入的参数(绝对会让用户感到困惑)。你几乎肯定不想使用它。

最好的方法是首先选择一个好的方法名称,这样可以明显地修改一个或两个列表的内容。然后使用///注释,以便函数的用户可以在Intellisense中看到更详细的描述。

如果您有兴趣,可以使用refout

的MSDN文档

答案 1 :(得分:2)

如果函数可能更改变量指向的List,并且调用者将引用新列表,则使用ref。

如果函数返回调用者在调用之前没有引用的新List,则使用out。只有在函数需要返回多个值时才应该使用它。

如果列表在函数调用之前始终存在,则不应使用refout

如果你的功能修改它收到的对象作为参数,总是记录好文件!

答案 2 :(得分:0)

如果您想要修改第一个列表,那么您必须使用ref关键字,并且调用者将知道他必须在列表前使用ref,否则该方法将被加下划线红线说有错误。

更新

您还可以使用ref关键字传递引用类型。通过引用传递引用类型使被调用方法能够修改引用参数引用的对象。对象的存储位置作为引用参数的值传递给方法。如果更改参数的存储位置,则更改基础参数的存储位置。来源:MSDN

相关问题