无法更改强类型通用列表中的对象

时间:2012-04-17 16:49:24

标签: c# list

我正在尝试使用数组订阅运算符迭代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 JavaScriptEventMxpath字段设置为null的对象。奇怪的是,在函数返回后,retVal中返回的对象的xpath字段已更改,但作为参数传递给此函数的原始domEvents列表保持不变。即原始列表中的对象仍将其xpath字段设置为null。

当您通过List上的数组订阅运算符访问对象时,C#是否实际获得了对象的克隆?如何逐个访问List的所有元素并进行更改?

1 个答案:

答案 0 :(得分:3)

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

与C ++不同,C#中structclass之间存在巨大差异。

Classes and Structs

What's the difference between struct and class in .NET?