我有一个带有一个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();
答案 0 :(得分:4)
如果您需要进行完全替换而不仅仅是更新(您可以简单地找到对象,并逐个复制属性),您可以通过查找索引然后直接替换它来省去一些麻烦,而不是删除,添加和重新排序。
int index = items.FindIndex(item => item.ID == replacement.ID);
if (index >= 0)
{
items[index] = replacement;
}
替换件将与原件位于同一位置。
答案 1 :(得分:0)
由于您要订购列表,您还可以使用二进制排序来查找要删除和添加的索引。
也没有必要同时添加&amp;去掉它。您可以找到该项目并更改其属性。保存你删除&amp;订单操作。
如果您有很多项目,使用带有Id作为键的字典将为您提供更快的查找。在这种情况下,Id必须是唯一的。