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

本文关键字:列表 对象 泛型 强类型 | 更新日期: 2023-09-27 18:31:20

我正在尝试使用数组订阅运算符迭代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

我调用此函数并传递JavaScriptEventM对象的List,这些对象的xpath字段设置为 null。奇怪的是,在函数返回后,retVal中返回的对象xpath字段发生了变化,但作为参数传递给此函数的原始domEvents列表保持不变。即原始列表中的对象仍将其xpath字段设置为 null。

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

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

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

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

类和结构

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