我正在尝试使用数组订阅运算符迭代List
中的所有对象并更改其中的字段,然后将它们的引用存储在另一个列表中。这是我写的代码:
private List<JavaScriptEventM> getSubset(List<JavaScriptEventM> domEvents)
{
List<JavaScriptEventM> retVal = new List<JavaScriptEventM>();
for (int i = 0; i < domEvents.Count; i++)
{
JavaScriptEventM e = domEvents[i];
e.xpath = getXPathToNode(e.source , false);
retVal.Add(e);
}
return retVal;
}
此代码应该访问名为domEvents
的列表中的所有成员并更改其xpath
公共字段,并将引用也存储在另一个列表中(称为retVal
)
我调用此函数并传递List
JavaScriptEventM
个xpath
字段设置为null的对象。奇怪的是,在函数返回后,retVal
中返回的对象的xpath
字段已更改,但作为参数传递给此函数的原始domEvents
列表保持不变。即原始列表中的对象仍将其xpath
字段设置为null。
当您通过List
上的数组订阅运算符访问对象时,C#是否实际获得了对象的克隆?如何逐个访问List
的所有元素并进行更改?
答案 0 :(得分:3)
不要在C#中使用struct
,除非您确切知道它在做什么。即struct的值语义会导致像原始数据不会改变的问题。
与C ++不同,C#中struct
和class
之间存在巨大差异。