我有两个列表,我想将其中一个设置为另一个:
var entities = new List<Entity>() { new Entity(), new Entity(), new Entity() };
List<Entity> newCollection = new List<Entity>();
我使用两种方式执行此操作:
1:
newCollection = entities;
阿拉伯数字:
foreach (var entity in entities)
{
entity.OnDeleted += Entity_Deleted;
newCollection.Add(entity);
}
有很多方法,但我想使用 foreach,因为我想订阅实体类的事件,然后将其添加到集合中。
我想知道这些方式之间有什么大的区别吗?
使用 foreach 时会遇到性能问题吗?
您可以在实体上附加事件,然后按以下方式将它们添加到另一个列表中:
IList<Entity> copy = entities.Select(entity => {
entity.OnDeleted += Entity_Deleted;
return entity;
}).ToList();
您编写的另一种方法(var copy = entities;
(只是将对第一个列表的引用复制到新变量,但它仍然是相同的实例。
同样的概念也适用于第一个列表中的所有实体:删除后,这些实体也将在第二个列表中删除,除非您对这些元素进行深层或浅层复制。
如果你有这样的实用程序,你可以通过这样在Select
中返回对象来解决问题:
return entity.Copy();
性能不应该是你目前的主要关注点,因为正如评论中所建议的,看起来你错过了一些关键概念,如引用和值类型,对这些东西的了解可能会从根本上改变你的进一步问题。