將參數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