按 ID 替换列表中项目的最佳方法

Dr.*_*ail 0 c# arrays class list

我有一个简单的类,具有一个 ID 和多个其他属性

public class Item
{
    public int ID { get; set; }
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我有List<Item>很多这些物品

List<Item> items = new List<Item>()
{
    new Item() { ID = 1, Prop1="foo" , Prop2= "foo" },
    new Item() { ID = 2, Prop1="foo" , Prop2= "foo" },
    new Item() { ID = 3, Prop1="foo" , Prop2= "foo" }
};
Run Code Online (Sandbox Code Playgroud)

问题:当我想Item通过 ID 替换 a 的新版本时,是否有比这更好/更聪明的方法:

//new Item
Item replacement = new Item() { ID = 2, Prop1 = "bar", Prop2 = "bar" };

items.RemoveAll(x => x.ID == replacement.ID);
items.Add(replacement);
items = items.OrderBy(x => x.ID).ToList();
Run Code Online (Sandbox Code Playgroud)

Ant*_*ram 6

如果您需要进行完全替换而不仅仅是更新(您可以简单地找到该对象,然后逐一复制属性),您可以通过找到其索引然后直接替换它而不是删除来省去一些麻烦、添加和重新排序。

int index = items.FindIndex(item => item.ID == replacement.ID);
if (index >= 0)
{
    items[index] = replacement;
}
Run Code Online (Sandbox Code Playgroud)

替换件将位于与原始件相同的位置。