【发布时间】:2026-01-05 16:35:01
【问题描述】:
除非您在参数上使用 ref 或 out 关键字,否则在 c# 中将 Value Type 参数传递给函数是按值的。但这是否也适用于Reference Types?
具体来说,我有一个接受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
}
【问题讨论】:
-
感谢大家的快速回复!就像我预期的那样。只是有片刻的不确定性..
-
如果你想做一些聪明的事情,你可以创建一个自己的列表类,通过复制隐式转换为 IList。我能看到的唯一好处是,它理论上可以防止您在传递集合时“忘记”制作副本。
-
不-我不想那样做.. 采用 IEnumerable 的 List 构造函数似乎很聪明。我只需要..
-
别怪你。通常,我使用“聪明”作为“不要这样做”的同义词。
标签: c# parameters pass-by-reference