c# - 更改 List<Texture> 的项目会创建一个新项目

标签 c# list

我有一个纹理类型的项目列表(只有一些属性的自定义类)。我可以更改该列表中其中一项的数据,但是当我保存它们时,并且列表中的项目多于一项,似乎会在该列表中创建一个新副本。

首先是纹理列表的声明,它位于静态类(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/

相关文章:

html - <li> 未填充 CSS 子菜单中 <ul> 的空间

list - Haskell - 将一个列表拆分为多个列表

java - Java 中列表的不稳定行为

python - 通过Python查找列表中特定位置的绝对最大值或最小值

c# - 从 C# 打印堆栈跟踪信息

c# - 如何在生产和开发环境上一致地获取 ASP.NET 5 DNX 项目的应用程序基路径?

c# - 实体数据查询和内存泄漏

c# - Entity Framework Core 5 在 SaveChanges() 中抛出 System.FormatException

c# - 统一使用单例的最佳方式

python - 为什么在此代码中出现python列表索引错误?