gpt4 book ai didi

c# - 修改结构列表中的特定项目

转载 作者:行者123 更新时间:2023-11-30 14:00:20 24 4
gpt4 key购买 nike

我有结构列表。我想修改结构中的特定数据。并且该结构位于列表的特定索引位置。

我想做这样的事情:

struct sample
{
int a;
string name;
}

List<sample> list = new List<sample>();


for(int i=0; i < list.Count; i++)
{
list[i].a = someotherlist[i].data;
}

最佳答案

问题是列表索引器创建了结构的副本,即它实际上是:

for(int i=0; i < list.Count; i++)
{
var completelyIsolatedClone = list[i];
completelyIsolatedClone.a = someotherlist[i].data;
}

编译器正在防止您犯明显的错误。您拥有的代码使用 get,改变数据的单独副本,但永远不会将其放回原处 - 因此您的更改没有任何用处。请注意,Mono 的人认为如果它按您的方式工作会很好,但是:http://tirania.org/blog/archive/2012/Apr-11.html

请注意,数组 的工作方式不同;对于数组,您正在就位接触结构,因此以下内容可以正常工作:

for(int i=0; i < list.Count; i++)
{
someArray[i].a = someotherlist[i].data;
}

另一种方法是将数据复制出来(get 访问器),对其进行变异,然后放回去:

for(int i=0; i < list.Count; i++)
{
var completelyIsolatedClone = list[i];
completelyIsolatedClone.a = someotherlist[i].data;
list[i] = completelyIsolatedClone;
}

或者更好的是,完全改变可变结构,也许使用一种将更改应用于副本的方法:

for(int i=0; i < list.Count; i++)
{
list[i] = list[i].SetA(someotherlist[i].data);
}

SetA 创建了一个 结构,例如DateTime.AddDays 等,即

public SomeType SetA(int a) {
return new SomeType(this.X, this.Y, a, this.Z);
}

关于c# - 修改结构列表中的特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com