我有一个纹理类型的项目列表(只有一些属性的自定义类)。我可以更改该列表中其中一项的数据,但是当我保存它们时,并且列表中的项目多于一项,似乎会在该列表中创建一个新副本。
首先是纹理列表的声明,它位于静态类(MainData)中:
public static List<Texture> Textures = new List<Texture>();
下面是根据用户可能填写的数据更改数据的代码:
for (int t = 0; t < MainData.Textures.Count; ++t)
{
if (MainData.Textures[t].Path == texture.Path)
MainData.Textures[t] = texture;
else
MainData.Textures.Add(texture);
}
我不知道他为什么这么做。只有当列表中有多个项目时才会发生这种情况。有什么明显的错误吗?我对此采取了错误的方法吗?
所以,我只是希望能够更改列表中每个选定项目的数据。 (我检查纹理路径列表以了解哪一个已更改,因为这是一个静态值,在整个程序中不会更改)。
最佳答案
简单地做
var tex = Textures.FirstOrDefault(t => t.Path == texture.Path);
if (tex != null)
tex = texture;
else
Textures.Add(texture);
在我看来,它更具表现力,并且表现得像你想要的那样。请注意,这只会更改它找到的第一个(如果有)。
关于c# - 更改 List<Texture> 的项目会创建一个新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046463/