【发布时间】:2018-08-17 17:09:03
【问题描述】:
我有一个奇怪的问题,我正在创建一个新对象,其中包含我通过我的函数使用的另一个对象 (paramObj) 的参数。因此,在对象构造函数中使用了 paramObj,但在调用构造函数后它最终被更改。由于 C# 是按值传递的,我不确定为什么会这样。
我的代码:
void MyFunction(List<string> filesets)
{
foreach(Fileset fs in filesets)
{
//At this point, fs.allFiles.Count is 30. The MyNewObject class
//takes a Fileset as a parameters and eventually clears the
//Fileset.allFiles List, making the count 0.
MyNewObject tmpObj = new MyNewObject(fs, null, "default");
//At this point, fs.allFiles.Count is 0, but I expect it to be 30
}
}
MyNewObject 类只是清除 Fileset 类中包含的 allFiles 列表。如果 C# 是传值,为什么会出现在构造函数之后?
【问题讨论】:
-
引用
fs是按值传递的。从逻辑上讲,内容是通过引用传递的。 -
您是说 Fileset 对象的所有字段都是通过引用传递的 - 这与通过引用传递的整个对象不同吗?反正有这个吗?
-
你读过那篇文章吗? stackoverflow.com/questions/8708632/…
-
如果你想阻止构造函数改变它接收到的引用的对象,试试下面的方法:
MyNewObject tmpObj = new MyNewObject((Fileset)fs.Copy(), null, "default");
标签: c# pass-by-reference pass-by-value