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

时间:2018-03-09 07:59:02

标签: c# arrays list class

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

public class Item
{
    public int ID { get; set; }
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

现在我有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" }
};

问题:如果我想用更新版本的ID替换Item,那么是否有更好/更好的方式:

//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();

2 个答案:

答案 0 :(得分:4)

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

int index = items.FindIndex(item => item.ID == replacement.ID);
if (index >= 0)
{
    items[index] = replacement;
}

替换件将与原件位于同一位置。

答案 1 :(得分:0)

  • 由于您要订购列表,您还可以使用二进制排序来查找要删除和添加的索引。

  • 也没有必要同时添加&amp;去掉它。您可以找到该项目并更改其属性。保存你删除&amp;订单操作。

  • 如果您有很多项目,使用带有Id作为键的字典将为您提供更快的查找。在这种情况下,Id必须是唯一的。

相关问题