将参数Value Type传递给c#中的函数是通过值,除非您在参数上使用ref或out关键字。但是这也适用于Reference Types?IList是否按价值传递?
具体而言,我有一个功能,需要一个IList<Foo>
。传递给我函数的列表是否包含其包含对象副本的列表副本?或者对列表的修改是否也适用于呼叫者?如果是这样 - 我可以通过一个聪明的方式来传递一份副本吗?
public void SomeFunction()
{
IList<Foo> list = new List<Foo>();
list.Add(new Foo());
DoSomethingWithCopyOfTheList(list);
..
}
public void DoSomethingWithCopyOfTheList(IList<Foo> list)
{
// Do something
}
Thx为快速回复的人!就像我预料的那样。只是有一个不确定的时刻.. – stiank81 2010-02-24 09:21:47
如果你想做一些聪明的事情,你可以做一个你自己的列表类,通过复制隐式投给IList。我能看到的唯一好处是,它在理论上可以防止您在传递集合时“忘记”复制副本。 – kyoryu 2010-02-24 09:43:32
不 - 我不想那样做。IEnumerable的List构造函数看起来像它一样聪明。所有我需要.. – stiank81 2010-02-24 09:45:52