0

我正在尝试遍历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的对象。奇怪的是,函数返回后,返回的对象的字段发生了变化,但作为参数传递给该函数的原始列表保持不变。即原始列表中的对象仍将其字段设置为空。JavaScriptEventMxpathretValxpathdomEventsxpath

当您通过数组订阅运算符访问对象时,C# 是否实际上获得了对象的克隆List?我怎样才能一个List一个地访问所有元素并更改它们?

4

1 回答 1

3

struct除非您确切知道它在做什么,否则不要在 C# 中使用。即 struct 的值语义会导致像您的问题一样,原始数据不会被更改。

struct与 C++ 不同,C#和C#之间存在巨大差异class

类和结构

.NET 中的结构和类有什么区别?.

于 2012-04-17T17:04:11.660 回答