无法更改强类型泛型列表中的对象
本文关键字:列表 对象 泛型 强类型 | 更新日期: 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# 中的 struct
和 class
之间存在巨大差异。
类和结构
.NET 中的结构体和类有什么区别?